来源:《Hadoop权威指南(第2版)》
1. 为什么需要推测执行?
MapReduce将作业分解成多个任务并行运行的机制,决定了作业运行的总体时间对运行缓慢的任务比较敏感。为了尽量避免运行缓慢的任务对作业运行时间“托后腿”的情况,需要启动作业的推测执行。
2. 什么是推测执行?
当Hadoop检测到一个任务运行比预期慢时,它会启动一个相同的任务进行备份。这就是任务的推测执行。 当原任务与推测任务其中之一完成后,便立即停止另一个任务。
3. 推测执行的属性设置
推测执行可以基于集群,也可以基于某个作业。
属性名字 | 描述 | 默认值 |
---|---|---|
mapred.map.tasks.speculative.execution | 如果任务运行较慢,决定是否运行相应Map任务的推测执行 | TRUE |
mapred.reduce.tasks.speculative.execution | 如果任务运行较慢,决定是否运行相应Reduce任务的推测执行 | TRUE |
两点说明:
- 任务运行缓慢的原因有多种,可能是硬件老化,也可能是软件问题。若是软件问题,需优化程序,推测执行不能从根本上解决问题。
- 推测执行是利用资源来优化时间的一种策略。若资源本来就紧张的情况下,是无法通过推测执行来优化系统性能的。
- 推测执行会降低集群容量。