任务运行失败
- 任务代码异常
- JVM在退出前向application master发送错误报告,报告被记录用户日志
- application master将任务标记为failed,释放容器和资源
- JVM软件缺陷而导致MapReduce用户代码由于某些特殊原因造成JVM退出。
- NodeManager注意到JVM退出,通知application master将任务标记为失败
- 任务挂起
- application master长时间未接收到进度更新,将任务标记为失败,JVM进程也将会自动杀死
- 默认超时时间是10分钟,对应的属性是:mapreduce.task.timeout,单位是毫秒;如果设置为0,则永远不会被标记为失败,挂起的任务占用资源不释放,降低集群效率,要避免这种设置。
- 避免在失败节点尝试重新调度,默认任务失败超过4次,不再重试。尝试次数由mapreduce.map.maxattempts 属性控制
- 如果希望少数几个任务不影响整体作业的执行,设置任务失败的最大百分比
- mapreduce.map.failures.maxpercent mapreduce.reduce.failures.maxpercent
- 终止或取消任务尝试,因为是推测副本或所处NodeManager失败,导致运行的任务被标记killed,被中止的尝试不计入任务尝试次数
ApplicationMaster运行失败
- 避免在失败节点尝试重新调度,默认任务失败超过4次,不再重试。尝试次数由mapreduce.map.maxattempts 属性控制
- 如果希望少数几个任务不影响整体作业的执行,设置任务失败的最大百分比
- mapreduce.map.failures.maxpercent mapreduce.reduce.failures.maxpercent
- 终止或取消任务尝试,因为是推测副本或所处NodeManager失败,导致运行的任务被标记killed,被中止的尝试不计入任务尝试次数
- application master向ResourceManager发送周期心跳,当失败时,ResrouceManager检测到失败并通知NodeManager开启一个新的容器并开始一个新的application master
- MapReduce application master 使用作业历史恢复失败的应用程序任务状态,不需要重新运行
- 恢复功能由: yarn.app.mapreduce.am.job.reduce.enable属性控制,默认开启(true)
- 如果application master运行失败,则必须向ResourceManager请求新的地址。
NodeManager运行失败
- application master向ResourceManager发送周期心跳,当失败时,ResrouceManager检测到失败并通知NodeManager开启一个新的容器并开始一个新的application master
- MapReduce application master 使用作业历史恢复失败的应用程序任务状态,不需要重新运行
- 恢复功能由: yarn.app.mapreduce.am.job.reduce.enable属性控制,默认开启(true)
- 如果application master运行失败,则必须向ResourceManager请求新的地址。
ResourceManager运行失败
- ResourceManager失败,所有的作业都失败且不能恢复
- 需要实现高可用(HA),在双机热备配置下运行一对ResourceMananger
- 所有运行中的应用程序的信息存储在一个高可用的状态存储区(Zookeeper/HDFS备份)