mapreduce任务失败、重试、推测式执行机制小结

mapreduce中我们自定义的mapper和reducer程序在执行后有可能遇上出错退出的情况,mapreduce中jobtracker会全程追踪任务的执行情况,对于出错的任务mapreduce也定义了一套自己的处理方式。
首先要明确的是mapreduce判断任务失败的方式。三种情况下任务会被认为执行失败:返回非0值、产生java异常、超时(长时间没响应)。对于第一种,通常用于streaming程序。如果你的mapper或reducer程序结束的时候返回了非0值,那么mapreduce会认为你的任务失败了。第二种主要用于java写的mapreduce程序。对于第三种,估计很多人都不知道。对于streaming,mapreduce在任务执行后会监测任务的输出(标准输出),如果任务在一定时间内无输出(这个时间可以通过mapred.task.timeout选项设定),则mapreduce会认为这个任务失败。因此写mapreduce程序的时候一定要留意程序是否会发生超时间假死的情况,如果有这种情况那就要考虑下程序会不会被误杀。
在任务失败后,mapreduce会重新执行任务,重试的次数也是可以设定的,一般是4次。
最后还要注意的是mapreduce还有一个推测式执行机制,在这个机制下如果任务执行时间超出预期(这个预期是根据其他任务的执行时间定的),那么mapreduce会另外启动一个跟这个任务相同的任务并行执行,在某个任务最先执行完成之后杀死其他尚未完成的任务。这个机制主要是用来避免某个reduce任务的执行环境有问题或者某个reduce任务执行中发生了反常情况而迟迟不能完成拖慢整体进度。但是这个机制在有些情况下也会造成问题,例如:如果你的reduce程序在相同输入并发执行的情况下会造成冲突,那么推测式执行机制对你来说就是个极大的隐患。不过好在推测式执行机制也是可以关闭的。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值