MapReduce(九)Speculative Execution

原文链接:
https://data-flair.training/blogs/speculative-execution-in-hadoop-mapreduce/

1、什么是Speculative Execution?

在Haddoop中,MapReduce将一个job细分成多个tasks让后并行地执行这些task,因而降低job的执行时间。这个执行模型对于慢task非常敏感(即使它们数量很少),因为它们会增加job的执行时间。有多种原因可以让task变慢,包括硬件的降级(比如从同机架到跨机架)或者软件的错误配置,尽管花了比期望时间的更长的时间,但因为task依然能正确完成任务,所以这种缓慢是比较难检测到。Hadoop并不尝试诊断和修复正在运行的慢task,取而代之的,它尝试检测到它们,并执行它们的备份任务。这就是speculative execution,而备份task被称为Speculative task。

2、Speculative Execution是如何工作的?

首先一个job的所有task都被启动起来。当一些task已经运行一段时间(至少一分钟),但进度不佳,从平均上对比慢过其他相同job的其他任务,speculative task就会被启动。如果原始的task已经完成,那么比它慢的还未完成的speculative task会被杀掉, 反过来, 如果speculative task先结束,那么原始task就会被杀掉.

3、Speculative Execution有什么好处?

因为超过100个节点的集群经常会面临硬件故障和网络拥塞等问题,运行两个相同的task是由好处的,比如我们就不需要等待出问题的task完成。不过如何同时启动两个相同的task,这会造成资源的浪费。

4、如何打开speculative Exceution功能?

Speculative execution作为MapReduce的任务优化技术,它是默认打开的. 如下配置,你可以关闭mapper和reducer的speculative execution:

<property>
<name>mapred.map.tasks.speculative.execution</name>
<value>false</value>
</property>
<property>
<name>mapred.reduce.tasks.speculative.execution</name>
<value>false</value>
</property>

5、什么时候需要关闭Speculative Execution?

Speculative Execution的目标主要是为了减少job的执行时间;不过,集群的效率会被复制任务所影响。因为speculative execution运行了冗余的任务,因此他会降低job的吞吐量。因为这个原因,一些集群管理着倾向于关闭这个功能。

posted @ 2021-06-18 16:47  ralgo  阅读(507)  评论(0)    收藏  举报