mapreduce作业reduce被大量kill掉,mapreducereduce


       之前有一段时间,我们的hadoop2.4集群压力非常大,导致提交的job出现大量的reduce被kill掉,相同的job运行时间比在hadoop0.20.203上面长了很多,这个问题其实是reduce 任务启动时机的问题由于yarn中没有map slot和reduce slot的概念,且ResourceManager也不知道map task和reduce task之间的依赖关系,因此MRAppMaster自己需要设计资源申请策略以防止因reduce task过早启动照成资源利用率低下和map task因分配不到资源而饿死,然后通过抢占机制,大量reduce任务被kill掉。MRAppMaster在MRv1原有策略(map task完成数目达到一定比例后才允许启动reduce task)基础上添加了更为严格的资源控制策略和抢占策略:

1、mapreduce.job.reduce.slowstart.completedmaps
当map 任务完成的比例达到该值后才会为reduce task申请资源,默认是0.05。

我们设置为0.5,也即map完成了50%之后在开始为reduce任务申请资源。

2、yarn.app.mapreduce.am.job.reduce.rampup.limit
在map任务完成之前,最多启动reduce 任务比例,默认是0.5

我们设置为0.2,也即map任务全部完成前,最多去启动20%的reduce任务。

3、yarn.app.mapreduce.am.job.reduce.preemption.limit
当map task需要资源但暂时无法获取资源(比如reduce task运行过程中,部分map task因结果丢失需重算)时,为了保证至少一个map task可以得到资源,最多可以抢占reduce task比例,默认是0.5。

我们用的时默认值。

我们集群通过修改了第一个和第二个参数的默认值,在也没用出现大量reduce被kill的情况了。

参考:http://blog.csdn.net/jiushuai/article/details/17733581

相关内容