2013-09-18 4 views
3

Мне нужно реализовать ниже Функциональность с использованием Hadoop Map-Reduce?Hadoop Map-Reduce, необходимо объединить два картографа с одним общим редуктором

1) Я читаю один вход для преобразователя из одного источника & другой вход от другого источника входного сигнала.

2) Мне нужно передать оба выхода преобразователя в один редуктор для дальнейшего процесса.

Есть ли сделать выше требования в Hadoop Map-Reduce

+9

если ваши картографов выходные одни и те же данные, типа, вы можете использовать 'MultipleInputs.addInputPath (работа, путь, inputFormatClass, mapperClass)', чтобы добавить несколько картографы. – zsxwing

+0

ya спасибо за информацию, но мне нужно добавить два разных выхода картографа для одного редуктора? Как я могу достичь этого? – HarshaKP

+2

Обычно я конвертирую все различные типы значений в BytesWritable и восстанавливаю их до фактического значения в редукторе. Также необходимо привязать тег, чтобы редуктор мог знать, как восстановить значения. – zsxwing

ответ

0

MultipleInputs.addInputPath - это то, что вы ищете. Так будет выглядеть ваша конфигурация. Убедитесь в том, как AnyMapper1 и AnyMapper2 написать тот же результат, ожидаемый MergeReducer

JobConf conf = new JobConf(Merge.class); 
conf.setJobName("merge"); 

conf.setOutputKeyClass(IntWritable.class); 
conf.setOutputValueClass(Text.class); 
conf.setReducerClass(MergeReducer.class); 
conf.setOutputFormat(TextOutputFormat.class); 

MultipleInputs.addInputPath(conf, inputDir1, SequenceFileInputFormat.class, AnyMapper1.class); 
MultipleInputs.addInputPath(conf, inputDir2, TextInputFormat.class, AnyMapper2.class); 

FileOutputFormat.setOutputPath(conf, outputPath); 
0

Вы можете создать пользовательскую запись. Вы можете заполнить его в Mapper. Позже в Reducer вы можете получить пользовательский записываемый объект и выполнить необходимую бизнес-операцию.