hadoop

来源:互联网 发布:铃声剪辑合并软件 编辑:程序博客网 时间:2024/06/07 08:09

1.MapReduce 错误处理机制

1) 硬件故障

在 Hadoop Cluster 中,只有一个 JobTracker,因此,JobTracker 本身是存在单点故障的。我们可以采用主备部署方式

除了 JobTracker 错误就是 TaskTracker 错误。TaskTracker 故障相对较为常见,MapReduce 通常是通过重新执行任务来解决该故障。

正常情况下,TaskTracker 会不断的与 JobTracker 通过心跳机制进行通信。

如果某 TaskTracker 出现故障或者运行缓慢,它会停止或者很少向 JobTracker发送心跳。

如果一个 TaskTracker 在一定时间内(默认是1 分钟)没有与 JobTracker通信,

那么 JobTracker 会将此 TaskTracker 从等待任务调度的 TaskTracker 集合中移除。

同时JobTracker 会要求此 TaskTracker 上的任务立刻返回。

如果此 TaskTracker 任务仍然在mapping 阶段的Map任务,那么 JobTracker会要求其他的TaskTracker重新执行所有原本由故障 TaskTracker 执行的 Map 任务。如果任务是在 Reduce 阶段的 Reduce 任务,那么JobTracker会要求其他 TaskTracker重新执行故障 TaskTracker未完成的 Reduce任务。

比如:一个 TaskTracker 已经完成被分配的三个 Reduce 任务中的两个,因为 Reduce 任务一旦完成就会将数据写到 HDFS 上,所以只有第三个未完成的 Reduce 需要重新执行。但是对于 Map 任务来说,即使 TaskTracker 完成了部分 Map,Reduce仍可能无法获取此节点上所有 Map 的所有输出。所以无论 Map 任务完成与否,故障 TaskTracker 上的 Map 任务都必须重新执行。

2) 任务执行失败引发的故障

在实际任务中,MapReduce作业还会遇到用户代码缺陷或进程崩溃引起的任务失败等情况。

用户代码缺陷会导致它在执行过程中抛出异常。

此时,任务 JVM 进程会自动退出,并向 TaskTracker 父进程发送错误消息,同时错误消息也会写入 log 文件,最后 TaskTracker将此次任务尝试标记失败

对于死循环程序或执行时间太长的程序,由于 TaskTracker 没有接收到进度更新,它也会将此次任务尝试标记为失败,并杀死程序对应的进程。

JobTracker 接到任务失败的通知后,通过重置任务状态,将其加入到调度队列来重新分配该任务执行(JobTracker 会尝试避免将失败的任务再次分配给运行失败的 TaskTracker)。

如果此任务尝试了 4 次(次数可以进行设置)仍没有完成,就不会再被重试,此时整个作业也就失败了。

原创粉丝点击