在spark中,我知道错误是通过重新计算rdd来恢复的,除非缓存了rdd。在这种情况下,计算可以从缓存的rdd开始。我的问题是,如何在mapreduce框架(比如apachehadoop)中恢复错误。比如说,在shuffle阶段(map之后,reduce之前)发生了一个故障,如何恢复它。是否再次执行Map步骤。mapreduce中是否有任何阶段将输出存储在hdfs中,以便只能从那里重新开始计算?一张又一张Map怎么办。reduce的输出是否存储在hdfs中?
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,我希望上面的描述就足够了。
task
map task
reducer task
shuffle and sort
mapred.map.max.attempts
mapred.reduce.max.attempts
1条答案
按热度按时间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,我希望上面的描述就足够了。