mapreduce容错,mapreduce1.0存在的问题
MapReduce的作业失败主要分为三个层次,即jobtracker失败、tasktracker和subtask实例。
1,jobtracker失败。
Jobtracker故障应该说是最严重的一种故障方式,在hadoop出现单点故障的时候是相当严重的,因为在这种情况下,作业最终会失败。虽然这种失败的概率极小,但应该避免。您可以启动多个jobtracker,但在这种情况下只能运行一个主job tracker。使用一种机制来确定哪一个是主作业跟踪器。
2,tasktacker失败。
在运行过程中,tasktracker会不断地通过心跳机制与系统jobtracker进行通信。如果tasktracker运行缓慢或失败,它将失败。Tasktracker会停止或很少希望jobtracker发送心跳。jobtracker将注意到此tasktracker发送的心跳,以便将此tasktracker从等待任务调度的tasktracker池中删除。jobtracker将安排此tasktracker的最后一个成功的地图任务返回。
(1),如果属于已完成的作业,reduce阶段无法在修改后的tasktracker上获取本地的map输出文件,任何任务都需要重新调度——也就是说,只要是映射阶段,就必须重新执行。
如果是reduce阶段,自然是一个完整的reduce任务,因为reduce只要完成就会把输出写到Hdfs。
3.子任务失败。这可以理解为JVM级别吗?
当map或reduce子任务中的代码抛出异常时,JVM进程会在退出前向服务进程tasktracker进程发送错误报告,tasktracker会将这个(任务尝试)任务尝试标记为失败状态,并释放一个槽来运行另一个任务。
对于流程任务,如果流程以非零退出代码退出,将被标记为失败。
子JVM突然退出,即JVM出错。此时,tasktracker会注意到进程已经退出,并将其标记为失败。
Tasktracker将一个子任务标记为失败,然后将其计数器减1,以便它可以为jobtracker申请新任务。它还通过heartbeat通知jobtracker本地任务尝试失败。收到任务失败通知后,jobtracker会重新加入调度队列,重新分配给其他tasktracker执行(避免将失败的任务分配给失败的task tracker)。但是,尝试的次数是有限制的。默认情况下,如果任务在4次尝试后仍未完成,将不会重试(jobtracker会将其标记为已终止),整个作业将无法执行。
4.作业清理、恢复管理器、任务清理、ExpireTrackers、expire启动任务、监控故障、清除恢复和许多后台线程。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。