大象教程
首页
Spark
Hadoop
HDFS
MapReduce
Hive
MapReduce 教程
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 推测执行。 ![推测执行](/media/editor/Speculative-Execution-in-Spark.gif "推测执行") 在 Hadoop 中,MapReduce 把作业分解成多个任务,为了减少作业的整体运行时间,这些任务会被并行执行,这使得作业的运行时间对运行缓慢的任务很敏感,因为这些运行缓慢的任务会增加作业的整体运行时间。 任务执行缓慢可能有多种原因,比如硬件老化,软件配置错误,但检测具体原因很困难,因为任务总能运行成功,尽管比预计时间长。Hadoop 并不会尝试诊断和修复执行缓慢的任务,相反,它会尝试检测他们并为他们执行备份任务。这就是所谓的推测执行,这些备份任务被称为推测任务。 ##推测执行工作原理 现在让我们来看一下 Hadoop 推测执行的过程。 首先,job 的所有任务都会被执行,如果某些任务在运行了一段时间(至少 1 分钟)之后,任务执行进度还未达到作业的平均进度,那么 Hadoop 就会为这些任务启动推测任务。如果原任务在推测任务之前执行完成,则推测任务会被中止,相反,如果推测任务在原任务之前完成,则原任务会被中止。 ##推测执行是否有好处 Hadoop MapReduce 推测执行在某些情况下是有好处的,因为具有 100 个节点的集群里面,硬件故障或者网络堵塞是比较普遍的情况,那么推测执行任务会使 MapReduce 作业更快完成,因为不需要等待有问题的任务执行完成。如果同时启动两个重复的任务,他们会互相竞争,导致推测执行无法工作,这对集群资源是一种浪费。 ##推测执行的关闭和启用 推测执行是 MapReduce 作业的一种优化技术,默认是启用的。你可以在 mapred-site.xml 配置文件中为 mapper 和 reducer 关闭推测执行技术。配置如下: ```bash
mapred.map.tasks.speculative.execution
false
mapred.reduce.tasks.speculative.execution
false
``` ##什么情况下需要关闭推测执行 推测执行的主要作用是减少作业的执行时间,然而,重复任务会影响到集群的性能。因为推测执行会启动许多冗余任务,这将降低集群整体吞吐量。基于这样的原因,有些集群管理员更倾向于在集群上关闭推测执行。
加我微信交流吧