2014-01-22 5 views
1

У меня есть кластер из пяти узлов, в котором содержатся DataNodes и TaskTrackers.Установка количества редукторов в задании MapReduce, которое находится в рабочем процессе Oozie

Я импортировал около 10 миллионов строк из Oracle через Sqoop и обрабатывал его через MapReduce в рабочем процессе Oozie.

Работа MapReduce занимает около 30 минут и используется только один редуктор.

Редактировать - Если я запускаю код MapReduce самостоятельно, отдельно от Oozie, job.setNumReduceTasks(4) правильно устанавливает 4 редуктора.

Я попытался следующие методы, чтобы вручную установить количество переходников до четырех, без успеха:

В Oozie установите следующее свойство в теге карты уменьшить узел:

<property><name>mapred.reduce.tasks</name><value>4</value></property> 

в MapReduce кода Java Мейн метода:

Configuration conf = new Configuration(); 
Job job = new Job(conf, "10 million rows"); 
... 
job.setNumReduceTasks(4); 

Я также попытался:

Configuration conf = new Configuration(); 
Job job = new Job(conf, "10 million rows"); 
... 
conf.set("mapred.reduce.tasks", "4"); 

Моя функция карта выглядит примерно так:

public void map(Text key, Text value, Context context) { 
    CustomObj customObj = new CustomObj(key.toString()); 
    context.write(new Text(customObj.getId()), customObj); 
} 

Я думаю, что есть что-то вроде 80000 различных значений для ID.

Моя Снижение функции выглядит примерно так:

public void reduce(Text key, Iterable<CustomObj> vals, Context context) { 
    OtherCustomObj otherCustomObj = new OtherCustomObj(); 
    ... 
    context.write(null, otherCustomObj); 
} 

Обычай объект излучается в Mapper реализует WritableComparable, но другие пользовательские возразили излучается в редукторе не реализует WritableComparable.

Вот журналы, относящиеся к счетчикам системы, счетчикам заданий и каркас уменьшения каркаса, где указано, что была запущена только одна задача сокращения.

map 100% reduce 100% 
Job complete: job_201401131546_0425 
Counters: 32 
    File System Counters 
    FILE: Number of bytes read=1370377216 
    FILE: Number of bytes written=2057213222 
    FILE: Number of read operations=0 
    FILE: Number of large read operations=0 
    FILE: Number of write operations=0 
    HDFS: Number of bytes read=556345690 
    HDFS: Number of bytes written=166938092 
    HDFS: Number of read operations=18 
    HDFS: Number of large read operations=0 
    HDFS: Number of write operations=1 
    Job Counters 
    Launched map tasks=11 
    Launched reduce tasks=1 
    Data-local map tasks=11 
    Total time spent by all maps in occupied slots (ms)=1268296 
    Total time spent by all reduces in occupied slots (ms)=709774 
    Total time spent by all maps waiting after reserving slots (ms)=0 
    Total time spent by all reduces waiting after reserving slots (ms)=0 
    Map-Reduce Framework 
    Map input records=9440000 
    Map output records=9440000 
    Map output bytes=666308476 
    Input split bytes=1422 
    Combine input records=0 
    Combine output records=0 
    Reduce input groups=80000 
    Reduce shuffle bytes=685188530 
    Reduce input records=9440000 
    Reduce output records=2612760 
    Spilled Records=28320000 
    CPU time spent (ms)=1849500 
    Physical memory (bytes) snapshot=3581157376 
    Virtual memory (bytes) snapshot=15008251904 
    Total committed heap usage (bytes)=2848063488 

Edit: Я изменил MapReduce ввести пользовательские разметки, своего рода компаратор, и группирования компаратор. По какой-то причине код теперь запускает два редуктора (когда запланировано через Oozie), но не четыре.

Я установил свойство mapred.tasktracker.map.tasks.maximum на 20 на каждой TaskTracker (и JobTracker), перезапустил их, но результата не было.

+0

вручную установить пользовательские разметки до 4, в способе осуществления разделения идентификаторов на основе некоторого условия в 4-х частях , Это просто проверка того, выполняются ли 4 раздела/редукторы. –

+0

Какая версия Hadoop вы используете? Убедитесь, что свойство, которое вы используете для установки редуктора, действительно для этой версии или нет. –

ответ

0

Просто в качестве отправной точки, что является значением следующего свойства в mapred-site.xml

<property> 
    <name>mapred.tasktracker.map.tasks.maximum</name> 
    <value>4</value> 
</property> 
+0

. Мой mapred-site.xml на каждом узле в моем кластере не установлен. –

+0

, то вы, скорее всего, получите либо 2, либо 1 редуктор (в зависимости от стандартных редукторов по умолчанию для этой версии). Подумайте, используя rsync для вытеснения Mapred-сайта.xml для подчиненных узлов – javadba

+0

Хорошо, прежде чем я выполнил ваши инструкции, я сам проверил код MR и смог запустить 4 редуктора. Затем я добавил пользовательский разделитель, сортировщик сравнения и компаратор группировки к моему коду MapReduce и запланировал его через Oozie, которому удалось увеличить количество редукторов до 2. Наконец я выполнил ваши инструкции, rsyncing и проверил, что каждый TaskTracker (и JobTracker) имеет «mapred.tasktracker.map.tasks.maximum» из 20, но рабочий процесс oozie по-прежнему запускает только два редуктора. –