У меня есть два задания MapReduce, выход первого редуктора является входом второго Mapper:Hadoop 2,2 цепи MapReduce рабочих мест Карта -> Reducer -> Карта -> Редуктор
Map1 -> Reduce1 -> Map2 -> Reduce2
Для теперь Map2
читает файлы, выведенные Reduce1
. Таким образом, Map1 -> Reduce1
и Map2 -> Reduce2
являются независимыми.
Это работает, но было бы проще, и я думаю, что более оптимизирован, если вывод Reduce1 был прямым вводом Map2.
Есть ли способ сделать это? В этом случае Map2
бы просто личность картограф, и было бы еще лучше, если бы я мог сделать:
Map1 -> Reduce1 -> Reduce2
Reduce1, map2 и Reduce2 имеют одинаковые входные и выходные тип.
Спасибо!
Вы все еще можете использовать картограф идентичности в качестве Mapper2, используя: 'conf.setOutputFormat (SequenceFileOutputFormat.class)' для первого класса Driver и 'conf.setInputFormat (SequenceFileInputFormat. class); 'для второго класса драйвера. Я не знаю синтаксических изменений для цепочки заданий в hadoop 2.2, поэтому я не буду публиковать ответ (пока). – vefthym
хорошая идея использования SequenceFileOutputFormat, как предложено #vefthym, что дает оптимизацию –
@vefthym Ницца, так лучше. Но мне все еще нужно использовать временный файл, нет возможности напрямую передавать данные с 'Reduce1' на' Map2'? –