任务运行失败

  • 任务代码异常       
  •  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备份)