- MapReduce 教程
- MapReduce 工作原理
- MapReduce Mapper
- MapReduce Reducer
- MapReduce 键值对
- MapReduce InputFormat
- MapReduce InputSplit
- MapReduce RecordReader
- MapReduce Partitioner
- MapReduce Combiner
- MapReduce Shuffle 和排序
- MapReduce OutputFormat
- MapReduce InputSplit 与 HDFS 块
- MapReduce 只有 Map 阶段的 job
- MapReduce 数据本地化
- MapReduce 推测执行
- MapReduce 计数器
- MapReduce 性能优化
MapReduce 推测执行
Hadoop 并不会尝试诊断或者修复执行缓慢的任务,相反,在一个任务运行比预期慢的时候,它会尽量检测,并启动另一个相同的任务作为备份。这就是所谓的任务的 “推测执行”
什么是推测执行
让我们首先理解一下,什么是 Hadoop 推测执行。
在 Hadoop 中,MapReduce 把作业分解成多个任务,为了减少作业的整体运行时间,这些任务会被并行执行,这使得作业的运行时间对运行缓慢的任务很敏感,因为这些运行缓慢的任务会增加作业的整体运行时间。
任务执行缓慢可能有多种原因,比如硬件老化,软件配置错误,但检测具体原因很困难,因为任务总能运行成功,尽管比预计时间长。Hadoop 并不会尝试诊断和修复执行缓慢的任务,相反,它会尝试检测他们并为他们执行备份任务。这就是所谓的推测执行,这些备份任务被称为推测任务。
推测执行工作原理
现在让我们来看一下 Hadoop 推测执行的过程。
首先,job 的所有任务都会被执行,如果某些任务在运行了一段时间(至少 1 分钟)之后,任务执行进度还未达到作业的平均进度,那么 Hadoop 就会为这些任务启动推测任务。如果原任务在推测任务之前执行完成,则推测任务会被中止,相反,如果推测任务在原任务之前完成,则原任务会被中止。
推测执行是否有好处
Hadoop MapReduce 推测执行在某些情况下是有好处的,因为具有 100 个节点的集群里面,硬件故障或者网络堵塞是比较普遍的情况,那么推测执行任务会使 MapReduce 作业更快完成,因为不需要等待有问题的任务执行完成。如果同时启动两个重复的任务,他们会互相竞争,导致推测执行无法工作,这对集群资源是一种浪费。
推测执行的关闭和启用
推测执行是 MapReduce 作业的一种优化技术,默认是启用的。你可以在 mapred-site.xml 配置文件中为 mapper 和 reducer 关闭推测执行技术。配置如下:
<property>
<name>mapred.map.tasks.speculative.execution</name>
<value>false</value>
</property>
<property>
<name>mapred.reduce.tasks.speculative.execution</name>
<value>false</value>
</property>
什么情况下需要关闭推测执行
推测执行的主要作用是减少作业的执行时间,然而,重复任务会影响到集群的性能。因为推测执行会启动许多冗余任务,这将降低集群整体吞吐量。基于这样的原因,有些集群管理员更倾向于在集群上关闭推测执行。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论