У меня есть кластер из пяти узлов, в котором содержатся 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), перезапустил их, но результата не было.
вручную установить пользовательские разметки до 4, в способе осуществления разделения идентификаторов на основе некоторого условия в 4-х частях , Это просто проверка того, выполняются ли 4 раздела/редукторы. –
Какая версия Hadoop вы используете? Убедитесь, что свойство, которое вы используете для установки редуктора, действительно для этой версии или нет. –