mapreduce容错,mapreduce1.0存在的问题

  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启动任务、监控故障、清除恢复和许多后台线程。

mapreduce容错,mapreduce1.0存在的问题