本文探讨的参数是:mapreduce.job.reduce.slowstart.completedmaps
关于此参数的介绍
hadoop 3.1.1中mapred-default.xml中关于此参数的介绍如下:
mapreduce.job.reduce.slowstart.completedmaps | 0.05 (默认值) |
Fraction of the number of maps in the job which should be complete before reduces are scheduled for the job.(介绍) |
默认配置的表达的意思是: 0.05%的map task结束后可以开始为reduce task申请资源。
配置的参数如果设置的过小,可能会让reduce task和map task争抢资源(若reduce占用过多资源,让map等待时间过长,map会抢占reduce),且会造成reduce空转。
若配置的参数过大,就丧失了让reduce和map并行,来降低job工作时间的目标。
因此slowstart参数该如何设计是一个学问。
在别人的博客里发现了以下的信息(33%的配比是如何推断得知我还不清楚:),以后搞懂了补上)
源码分析
接下来进入源码分析阶段。
1、初始化,在RMContainerAllocator.java中的serviceInit函数里可看到reduceSlowStart的初始化过程,如果配置文件里对其进行了更改,就用更改过的参数值;如果没有,则是使用的默认值0.05。
2、RMC