2012-03-14 4 views
2

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

б) Можно ли использовать две задачи карты (с помощью двух различных функций и одной Уменьшить задачу в работе MapReduce? Большое спасибо

+1

Что это вы пытаетесь достичь, начав работу MapReduce внутри задания MapReduce? –

+0

У меня есть два больших набора данных ввода (set1 и set2). Для каждого элемента записи set1 мне нужны все элементы множеств 2 для его обработки. Поэтому я намереваюсь, чтобы моя программа драйвера отправляла set1 в качестве входных данных для задания mapreduce. Затем в Map Task, чтобы обработать элемент записи из set1, я намерен отправить другое задание mapReduce, чьи входные данные установлены2. Я не знаю, возможно это или нет. Я думаю, что это возможно теоретически, но невозможно, потому что ни один слот не доступен. Возможно, если моя функция Map представит другое задание MapReduce в другой кластер Hadoop с другим JobTracker? –

ответ

1

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

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

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

0

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

0

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

0

Я предлагаю вам взглянуть на рамки Oozie.

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

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

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