Я должен взять вывод моего Mapper и передать его 4 раза моему редуктору.MapReduce Multiple Reduce Task
Редуктор - это слияние данных. Поэтому после Mapper, Reducer объединяет некоторые данные на первой итерации, меняет ключи и remerge и вторую итерацию и так далее ...
Я пытаюсь использовать job.setNumReduceTasks(4)
, но ничего не происходит. У меня есть только 1 выход и простой System.out.println()
, расположенный на моем дисплее Редуктора только 1 сообщение.
Job job = new Job(getConf());
job.setJarByClass(Driver.class);
job.setJobName(this.getClass().getName());
FileInputFormat.setInputPaths(job, new Path(input));
FileOutputFormat.setOutputPath(job, new Path(output+System.nanoTime()));
job.setMapperClass(KMMapper.class);
job.setReducerClass(KMReducer.class);
job.setNumReduceTasks(4);
job.setMapOutputKeyClass(Text.class);
job.setMapOutputValueClass(Text.class);
job.setOutputKeyClass(Text.class);
job.setOutputValueClass(Text.class);
job.waitForCompletion(true);
---------- ---------- EDIT
Кроме того, пожалуйста, обновите ваш вопрос возможно я/р ADN о/р
Я должен реализовать новый способ кластеризации данных.
Mapper - это алгоритм кластеризации, а выход - ключ/список точек в кластере.
Каждый редуктор сравнивает кластер с тем же ключом, и если они «похожи», редуктор сливает его. Редуктор выбирает новые клавиши, а выход - новый ключ/список точек. При случайном выборе новых ключей и большой итерации все исходные кластеры будут сравниваться.
job.setNumReduceTasks определяет, сколько редукторов у вас будет, а не сколько времени вы применяете, уменьшая – seneque
и как я могу применить один и тот же редуктор 4 или 5 раз? –
Непонятно, что вам нужно в точности, но попробовали ли вы один и тот же алгоритм 4 раза (например, используя цикл for)? Вы не можете запускать фазу уменьшения более одного раза, потому что редуктор всегда работает после сопоставления (в MapReduce нет работы по сокращению, даже если может быть задание только для карты). – vefthym