java—如果在中间阶段发生故障,mapreduce如何从错误中恢复

yr9zkbsy  于 2021-05-27  发布在  Spark
关注(0)|答案(1)|浏览(477)

在spark中,我知道错误是通过重新计算rdd来恢复的,除非缓存了rdd。在这种情况下,计算可以从缓存的rdd开始。
我的问题是,如何在mapreduce框架(比如apachehadoop)中恢复错误。比如说,在shuffle阶段(map之后,reduce之前)发生了一个故障,如何恢复它。是否再次执行Map步骤。mapreduce中是否有任何阶段将输出存储在hdfs中,以便只能从那里重新开始计算?一张又一张Map怎么办。reduce的输出是否存储在hdfs中?

8ehkhllq

8ehkhllq1#

你所指的是失败的 task 可能是 map task 或者 reducer task 在特殊情况下 task 失败时,hadoop启动另一个计算资源以执行失败的map或reduce任务。
当涉及到失败的 shuffle and sort 过程中,它基本上是在某个特定节点发生故障的地方 reducer task 已失败,它将被设置为在另一个资源中重新运行(顺便说一句,reducer阶段从shuffle和sort进程开始)。
当然,如果任务不断失败,它不会无限地分配任务。下面有两个属性可以确定任务的失败或尝试次数。 mapred.map.max.attempts 用于Map任务和属性 mapred.reduce.max.attempts 减少任务。
默认情况下,如果任何任务失败四次(或在这些属性中配置的任何任务),则整个作业将被视为失败。-hadoop权威指南
简言之 shuffle and sort 作为reducer的一部分,它只会尝试重新运行reducer任务。Map任务不会重新运行,因为它们被视为已完成。
mapreduce中是否有任何阶段将输出存储在hdfs中,以便只能从那里重新开始计算?
只有最终输出将存储在hdfs中。map的输出被分类为中间数据,不会存储在hdfs中,因为hdfs会复制存储的数据,基本上为什么您希望hdfs管理在作业完成后没有用处的中间数据。清理它也会有额外的开销。因此,Map输出不存储在hdfs中。
一张又一张Map怎么办。reduce的输出是否存储在hdfs中?
减速器的输出将存储在hdfs中。对于Map,我希望上面的描述就足够了。

相关问题