2014-01-24 2 views
0

Мне нужно реализовать два задания mapReduce, где Mapper в фазе II (Mapper_2) должен иметь выход редуктора в фазе I (редуктор_1).Mapper with multipleInput на кластере Hadoop

Mapper_2 также нуждается в другом вводе, который представляет собой большой текстовый файл (2TB).

Я написал следующее, но мой вопрос: текстовый ввод будет разделен между узлами в кластере, но как быть с выходом редуктора _1, поскольку я хочу, чтобы каждый обработчик в фазе II имел весь вывод Reducer_1.

MultipleInputs.addInputPath(Job, TextInputPath, SomeInputFormat.class, Mapper_2.class); 
MultipleInputs.addInputPath(Job, Ruducer_1OutputPath, SomeInputFormat.class, Mapper_2.class); 

ответ

1

Ваше использование нескольких входов кажется прекрасным. Я бы посмотрел на использование распределенного кэша для вывода редуктора_1, который будет использоваться совместно с mapper_2.

JobConf job = new JobConf(); 
DistributedCache.addCacheFile(new URI("/path/to/reducer_1/ouput"), 
           job); 

Кроме того, при использовании распределенного кэша, не забудьте прочитать файл кэша в методе установки в mapper_2.

установка() выполняется один раз для каждого картографа перед картой() вызывается и очистки() выполняется один раз для каждого картографа после последнего вызова к карте()

+0

Спасибо за Ваш ответ, Как я могу получить доступ к данным в distributedCache когда я пишу код Mapper_2? – SNSI

Смежные вопросы