Hadoop学习笔记(二):MapReduce的进度和状态

MapReduce的状态和进度

Hadoop学习笔记(二):MapReduce的进度和状态_第1张图片

MapReduce是长时间运行的批量作业,时间一般是数秒至数小时,因此需要知道作业的进度和状态。
1. 状态
       状态包括:Job或task的状态(一个Job和它的每个task都有一个状态,比如:正在运行、成功完成、失败状态)、map和reduce的状态、作业计数器的状态、用户设置的状态消息或描述。

2. 进度
       进度是任务完成的百分比。对于map任务,进度是已处理输入占总输入的比例。而reduce任务,情况稍微复杂。整个reduce过程分成三部分,系统根据这三部分估计已处理的reducer输入的比例。比如,如果任务已经执行reduce一半的输入,那么任务的进度是5/6。因为已经完成复制阶段和排序阶段,每个阶段占1/3,再加上已经完成reduce阶段的一半(占1/6)。
       进度报告很重要,因为它表明任务的执行情况。构成进度的所有操作如下:
       <1>mapper或reducer读入一条输入记录
       <2>mapper或reducer写入一条输出记录
       <3>在一个Reporter中设置状态描述
       <4>增加计数器(使用Reporter的incrCounter( )方法)
       <5>调用Reporter的progress( )任务

3. 报告状态和进度
  • 如果任务报告了进度,就会设置一个标志,表明状态报告将发送到TaskTracker。有一个独立线程每隔3秒检查一次该标志,如果已设置,则告知TaskTracker当前任务的状态。
  • Tasktracker每隔5秒发送“心跳”到JobTracker,告知该TaskTracker运行的所有任务的状态。其中,“心跳”的间隔由集群大小决定,集群越大,间隔越长。
  • 计数器发送的时间间隔通常大于5秒,因为计数器占用的带宽相对较高。
4. 作业的完成
       当JobTracker收到作业的最后一个任务已完成的通知后,把作业的状态设置为“成功”。然后,JobClient查询状态,知道任务已成功完成,便向用户打印一条消息。另外,可以通过设置job.end.notification.url属性,使JobTracker发送HTTP作业通知,让客户端收到回调命令。
       最后,Jobtracker清空作业的工作状态,并指示TaskTracker也清空工作状态(比如,删除中间输出)。

5. 失败的情况
  5.1 任务失败
  • map或reduce任务中的用户代码抛出异常,此时,子JVM进程会在退出之前向TastTracker发送错误报告。错误报告最后被记入用户日志,TaskTracker将此次task attempt标记为failed,并释放该任务槽。
  • 当streaming任务失败,因为属性stream.non.zero.exit.is.failure的值为true(true是默认值),streaming进程以非零退出代码退出,task attempt被标记为failed。
  • 子JVM突然退出(可能原因是JVM存在bug),此时TaskTracker会注意到进程已经退出,将task attempt标记为failed。
  5.2 任务挂起
  • 当TaskTracker接收进度报告超时,便把任务标记为failed,JVM子进程被自动杀死。超时时间由mapred.task.timeout属性设定。如果超时时间设为0,任务将不进行超时判定。被挂起的任务永远不会释放任务槽,最终降低整个集群的效率。
  • JobTracker通过“心跳”知道一个任务失败后,会重新调度该任务的执行,但会尽量避免使用原来失败过的任务槽。
  • 当一个任务的失败次数超过4次,该任务将不会再被执行。失败次数由属性mapred.map.max.attempts(map任务)或mapred.reduce.max.attempts(reduce任务)设定,默认值都为4。
  • 另外,还可以设置在不触发作业失败的情况下允许任务失败的最大百分比,由属性mapred.max.map.failures.percent(map任务)和mapred.max.reduce.failures.percent( reduce任务)设定。
  5.3 TaskTracker失败
  • 如果JobTracker接收“心跳”超时,那么它会把这个TaskTracker移除。
  • 如果某个TaskTracker失败任务数远大于集群平均失败任务数,那么这个TaskTracker会被JobTracker列入黑名单。被列入黑名单的TaskTracker可以通过重启从黑名单中移出。
  5.4 JobTracker失败
     JobTracker失败是所有失败中最严重的一种,但概率很小。因为这是一个单点故障,所以发生后作业注定失败。

你可能感兴趣的:(mapreduce,hadoop)