Карта уменьшить в карте уменьшить - PullRequest
2 голосов
/ 15 марта 2012

Я разрабатываю Map / Reduce, используя Hadoop. Моя программа-драйвер передает задание MapReduce (с заданием Map and Reduce) в систему отслеживания заданий Hadoop. У меня есть два вопроса: а) Может ли моя карта или задача уменьшения отправить другую работу MapReduce? (с тем же кластером Hadoop и с тем же Job Tracker). Это означает, что моя исходная программа драйвера отправляет задание mapreduce, в котором его карта или задача сокращения порождают другое задание MapReduce и отправляют его в тот же кластерный Hadoop и в тот же Job Tracker. Я думаю, что это возможно. Но я не уверен. Кроме того, это хорошее решение? Если нет, можем ли мы найти другое решение?

b) Можем ли мы использовать две задачи Map (с двумя различными функциями и одной задачей Reduce в задании MapReduce? Большое спасибо

Ответы [ 5 ]

1 голос
/ 16 марта 2012

Вы, безусловно, можете объединить несколько этапов карты, используя класс ChainMapper

Вы также можете установить зависимости между заданиями, используя класс JobControl и метод addDependingJob ().Это может быть предпочтительнее, чем запуск заданий Map Reduce из других заданий Map Reduce, что противоречит основному подходу Map Reduce, поскольку это, скорее всего, приведет к тому, что ваше решение больше не будет устойчивым к аппаратному отказу на отдельном узле.

Глава 5 Hadoop в действии Чака Лэма имеет хороший обзор этого.

0 голосов
/ 27 апреля 2015
  1. Можно запустить MR с другого MR. oozie job launcher запускает любое действие (pig, java, MR), используя карту в качестве запуска.

  2. Пользовательский API "MultiInputs" для определения разных карт для разных входных путей, но с использованием одного и того же редуктора. Это классический пример исполнения "Joins" https://hadoop.apache.org/docs/stable/api/org/apache/hadoop/mapreduce/lib/input/MultipleInputs.html

0 голосов
/ 07 июня 2012

Я бы посоветовал вам взглянуть на рамки Oozie.

0 голосов
/ 27 мая 2012

Вы должны изучить каскадирование, которое как бы предназначено для цепочки (или «каскада») выходов одного задания преобразования карты в другое. Он абстрагирует большую часть тяжелой работы, необходимой для этого, и позволяет разработчику писать на более высоком уровне для выполнения сложных многошаговых заданий mapreduce.

0 голосов
/ 09 мая 2012

Нет, я не думаю, что это возможно.Альтернативное решение состоит в том, чтобы запустить отдельную задачу MapReduce с входными данными как set1 и set2, а в фазе Map добавьте условие if, что если чтение кортежа происходит из набора 1, добавьте его в arraylist1, а если из набора 2, добавьте его в arraylist2,Затем вы делаете все, что вы хотите с этими двумя arraylists!

...