在单节点Hadoop集群上将Reducer Count增加到1以上会导致串行Reducer执行

在单节点Hadoop集群上将Reducer Count增加到1以上会导致串行Reducer执行,hadoop,mapreduce,hortonworks-data-platform,Hadoop,Mapreduce,Hortonworks Data Platform,在将单节点HDP1.3.2实例推送到集群之前,我正在测试它的一些容量调度设置。我知道MR作业的默认还原器数量为1,除非覆盖它,我认为在使用单节点集群时,还原器也可能存在一些特殊性,这可能会导致此问题 我在mapred-site.xml文件中设置的值是: mapred.cluster.map.memory.mb=768 mapred.tasktracker.map.tasks.maximum=8 mapred.cluster.max.map.memory.mb=6144 mapred.job.ma

在将单节点HDP1.3.2实例推送到集群之前,我正在测试它的一些容量调度设置。我知道MR作业的默认还原器数量为1,除非覆盖它,我认为在使用单节点集群时,还原器也可能存在一些特殊性,这可能会导致此问题

我在mapred-site.xml文件中设置的值是:

mapred.cluster.map.memory.mb=768
mapred.tasktracker.map.tasks.maximum=8
mapred.cluster.max.map.memory.mb=6144
mapred.job.map.memory.mb=1536

mapred.cluster.reduce.memory.mb=512
mapred.tasktracker.reduce.tasks.maximum=8
mapred.cluster.max.reduce.memory.mb=4096
mapred.job.reduce.memory.mb=2048
capacity-schedule.xml:

mapred.capacity-scheduler.queue.default.capacity=50 
(4 reducers appear on localhost:50030/scheduler for this default queue)
mapred.capacity-scheduler.queue.queue1.capacity=25
mapred.capacity-scheduler.queue.queue2.capacity=25
我正在运行一个1M行terasort程序,具有以下参数:

hadoop jar /usr/lib/hadoop/hadoop-examples.jar terasort -Dmapred.job.queue.name=default -Dmapred.reduce.tasks=4 ./terasort-input-small ./terasort-output
它确实运行了4个reduce任务。。。但是是串行的,不是并行的。 然后我禁用了capacity-schedule.xml并运行了默认值100,然后。。。2同时实现两个减速器并行-进度

然后我认为它一定是我的capacity-schedule.xml文档,但所有的值似乎对并发reduce任务也没有限制

mapred.capacity-scheduler.default-init-accept-jobs-factor=10
mapred.capacity-scheduler.default-maximum-active-tasks-per-queue=200000
mapred.capacity-scheduler.default-maximum-active-tasks-per-user=100000
mapred.capacity-scheduler.default-minimum-user-limit-percent=100
mapred.capacity-scheduler.default-supports-priority=false
mapred.capacity-scheduler.default-user-limit-factor=1
mapred.capacity-scheduler.init-poll-interval=5000
mapred.capacity-scheduler.init-worker-threads=5
mapred.capacity-scheduler.maximum-system-jobs=3000
mapred.capacity-scheduler.queue.default.init-accept-jobs-factor=10
mapred.capacity-scheduler.queue.default.maximum-capacity=-1
mapred.capacity-scheduler.queue.default.maximum-initialized-active-tasks=200000
mapred.capacity-scheduler.queue.default.maximum-initialized-active-tasks-per-user=100000
mapred.capacity-scheduler.queue.default.minimum-user-limit-percent=100
mapred.capacity-scheduler.queue.default.supports-priority=false
mapred.capacity-scheduler.queue.default.user-limit-factor=1
mapred.capacity-scheduler.queue.default.capacity=50
mapred.capacity-scheduler.queue.queue1.capacity=25
mapred.capacity-scheduler.queue.queue2.capacity=25

有人能解释一下这种奇怪的还原程序顺序执行吗?

好的,解决方案是增加mapred.cluster.reduce.memory.mb

mapred.cluster.reduce.memory.mb=768MB #allowed 2 reducers to run at once
mapred.cluster.reduce.memory.mb=1536MB #allowed all 4 reducers to run at once.
问题是插槽大小需要与作业任务大小相等

mapred.job.reduce.memory.mb = mapred.cluster.reduce.memory.mb