2014-01-23 2 views
1

У меня есть два задания 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 имеют одинаковые входные и выходные тип.

Спасибо!

+1

Вы все еще можете использовать картограф идентичности в качестве Mapper2, используя: 'conf.setOutputFormat (SequenceFileOutputFormat.class)' для первого класса Driver и 'conf.setInputFormat (SequenceFileInputFormat. class); 'для второго класса драйвера. Я не знаю синтаксических изменений для цепочки заданий в hadoop 2.2, поэтому я не буду публиковать ответ (пока). – vefthym

+0

хорошая идея использования SequenceFileOutputFormat, как предложено #vefthym, что дает оптимизацию –

+0

@vefthym Ницца, так лучше. Но мне все еще нужно использовать временный файл, нет возможности напрямую передавать данные с 'Reduce1' на' Map2'? –

ответ

0

Согласно моему пониманию этих пунктов я могу вам сказать (может или не может помочь вам, поправьте меня, если я ошибаюсь):

1) отображение 1-> уменьшить 1-> непосредственно mapper2: для оптимизации рассматриваются в вычислительной структуре искрового кластера (используя вычисления в памяти, избегая ненужных операций чтения/записи в hdf).

2) если вы хотите что-то вроде редуктора1 -> редуктор2. вам нужно подумать о том, как вы можете написать логику в одном редукторе, но проблема в том, что все зависит от вашего требования. Я имею в виду агрегацию, по которой вы хотите выполнять клавиши (более подробно: редуктор1 получает тот же набор ключей, на который только u может выполнять задачу следующей агрегации).

3) В Hadoop протокол подобен этому: map -> then aggregation, если какая-либо следующая агрегация, она должна поступать из Userdefinedmapper/IdentityMapper.

надеюсь, что это помогает :)

+0

1) Если мне это не нужно, я скорее использую только Hadoop и MapReduce. 2) Типы ключей одинаковы, но не их значения. 3) Если мне нужно использовать IdendityMapper, это не проблема, я просто не хочу использовать временные файлы между 'Reduce1' и' Map2'. –

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