Как написать 'map only' задания hadoop? - PullRequest
41 голосов
/ 22 февраля 2012

Я новичок в hadoop, я знакомлюсь со стилем программирования с уменьшением карты, но теперь я столкнулся с проблемой: иногда мне нужна только карта для задания, и мне нужен только результат карты непосредственно в качестве вывода,что означает, что фаза сокращения здесь не нужна, как я могу добиться этого?

Ответы [ 4 ]

58 голосов
/ 22 февраля 2012

Это отключает редуктор.

job.setNumReduceTasks(0);

http://hadoop.apache.org/docs/current/api/org/apache/hadoop/mapreduce/Job.html#setNumReduceTasks(int)

8 голосов
/ 22 февраля 2012

Вы также можете использовать IdentityReducer:

http://hadoop.apache.org/common/docs/current/api/org/apache/hadoop/mapred/lib/IdentityReducer.html

4 голосов
/ 08 марта 2016

Может быть весьма полезно, когда вам нужно запустить работу с мапперами только из терминала.Вы можете отключить редукторы, неявно указав 0 редукторов в команде hadoop:Опция "-reduce NONE", которая эквивалентна "-D mapred.reduce.tasks = 0".

0 голосов
/ 01 июля 2018

Если вы используете oozie в качестве планировщика для управления вашими заданиями hadoop, тогда вы можете просто установить свойство mapred.reduce.tasks (по умолчанию число сокращений задач на задание) равным 0. Вы можете добавить свой маппер всвойство mapreduce.map.class, а также нет необходимости добавлять свойство mapreduce.reduce.class, поскольку редукторы не требуются.

<configuration>
   <property>
     <name>mapreduce.map.class</name>
     <value>my.com.package.AbcMapper</value>
   </property>
   <property>
     <name>mapred.reduce.tasks</name>
     <value>0</value>
   </property>
   .
   .
   .
<configuration>
...