在现实情况中,用户代码错误不断,进程奔溃,机器故障等等。使用hadoop的好处之一就是可以它能处理这类故障并成功完成任务。需要考虑的实体失败任务为:任务(job),Application Master,NodeManager和ResourceManager。
1.任务失败
1.1 可能存在以下情况:
- MapTask或者ReduceTask中由于代码原因抛出异常,jvm在关闭之前,会通知mrAppMaster这个task任务失败,在mrAppMaster中,错误报告被写入到用户日志并且任务标记为失败,并释放jvm资源,供其他任务使用。
对于streaming任务,如果streaming进程以非0代码退出,则被标记为失败。这种行为由stream.non.zero.is.failure属性(默认值为true)控制 - jvm突然退出,可能是由于jvm缺陷而导致mr用户代码由于某种特殊原因造成jvm退出。nodeManage会将这消息通知到mrAppMaster,标记此次任务失败
- 任务挂起(可能是由于资源不足造成):一旦mrAppMaster一段时间没有接收到进度的更新,则将任务标记为失败,nodeManager会将该jvm进程杀死。任务失