【Hadoop七】基于Yarn的Hadoop Map Reduce容错

编程技术  /  houtizong 发布于 3年前   105

运行于Yarn的Map Reduce作业,可能发生失败的点包括

  • Task Failure
  • Application Master Failure
  • Node Manager Failure
  • Resource Manager Failure

1. Task Failure

任务执行过程中产生的异常和JVM的意外终止会汇报给Application Master。僵死的任务也会被Application Master监测到,这是通过Task和Application Master之间的心跳实现的,对于Applciation Master来说,任务意外终止和任务僵死(长时间不给Application Master发送心跳包,这个心跳时间超时时间可以通过mapreduce.task.timeout进行设置)是一样的。

 

Hadoop MapReduce如何判定一个任务失败,任务失败是否使得整个作业失败

  • 任务有重试机制,如果重试四次任务仍然失败则认为任务彻底失败,不再进行尝试运行。Mapper任务的重试次数以及Reducer任务的重试次数可以分别通过mapreduce.map.maxattempts和mapreduce.reduce.maxattempts进行设置
  • 作业失败是根据失败的Mapper Task占Mapper Task的总数百分比和失败的Reducer Task的占Reducer任务总数的百分比进行判定的,这个百分数可以分别通过mapreduce.map.failures.maxpercent以及mapreduce.reduce.failures.maxpercent进行设置

2. Application Master Failure

同任务失败后进行重试一样,Application Master失败也会进行重试,默认情况下,Application Master失败一次,Yarn就认为Application Master失败了,即默认情况下是没有重试机制的。 重试的次数可以通过yarn.resourcemanager.am.max-retries进行次数设置。

 

作业运行过程中,Application Master会定时的向Resource Manager发送心跳包,如果在给定的时间内Resource Manager没有收到来自Application Master心跳包,那么Resource Manager进行失败检测然后重新启动一个新的Container,然后在这个Container中启动新的Application Master进程。对于新创建的Application Master,它能够检测到之前失败的Application Master已经运行完成的任务,因此,新的Application Master无需重头开始已经执行过的任务。

 

客户端从Application Master获取任务执行的状态信息,如果Application Master挂了然后新的Application Master启动后,客户端需要知道新的Application Master地址。在Application Master初始化作业时,客户端会向Resource Manager发送请求询问Application Master的地址,然后缓存在客户端本地。如果客户端长时间得不到Application Master的应答,那么客户端会重新向Resource Manager发送请求询问新的Application Master的地址

 

3. Node Manager failure

如果Node Manager挂了,那么Node Manager停止向Resource Manager发送心跳包,此时,ResourceManager会将它从可用节点中移除。默认情况下,Resource Manager等待10分钟以确定node manager已经挂了。这个时间间隔可以通过yarn.resourcemanager.nm.liveness-monitor.expiry-interval-ms进行设置, 默认600000

 

Node Manager挂了,那么运行于其上的Task和Application Master都会失败,Application Master和Task的恢复机制前面已有描述。

 

如果Node Manager本身没有挂,但是运行于这个节点的任务数失败率非常高,那么Application Master将把这个Node Manager加入到黑名单中。(是Application Master将Node Manager加入到了黑名单中)

 

4. Resource Manager failure

Resource Manager挂了,那么Yarn的各个组件,包括正在执行的作业、任务都会受到影响。Resource Manager的作用如此重要,因此Hadoop提供了检查点不定时的将它的状态持久化到存储系统,以便在它失败后,能够从失败的状态中恢复过来。

 

Resource Manager挂了之后,系统管理员重新启动一个新的Resource Manager,然后从上个失败的Resource Manager保存的检查点进行状态恢复。保存的状态信息包括包括集群的Node Managers以及正在运行的作业,Task和Application Master不在要恢复的状态中,因为Application Master是由Node Manager管理,Task是由Application Master管理。

 

用于记录Resource Manager状态信息的存储介质是由yarn.resourcemanager.store.class设置的,这个属性接受一个类,默认是org.apache.hadoop.yarn.server.resourcemanager.recovery.MemStore,即Resource Manager默认将状态信息记录到内存中,这很不合理,如果Resource Manager挂了,内存数据也挤有可能挂了,将状态信息记录到内存中,不知道是怎么考虑的!Resource Manager也可以将状态信息记录到Zookeeper中

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

请勿发布不友善或者负能量的内容。与人为善,比聪明更重要!

留言需要登陆哦

技术博客集 - 网站简介:
前后端技术:
后端基于Hyperf2.1框架开发,前端使用Bootstrap可视化布局系统生成

网站主要作用:
1.编程技术分享及讨论交流,内置聊天系统;
2.测试交流框架问题,比如:Hyperf、Laravel、TP、beego;
3.本站数据是基于大数据采集等爬虫技术为基础助力分享知识,如有侵权请发邮件到站长邮箱,站长会尽快处理;
4.站长邮箱:[email protected];

      订阅博客周刊 去订阅

文章归档

文章标签

友情链接

Auther ·HouTiZong
侯体宗的博客
© 2020 zongscan.com
版权所有ICP证 : 粤ICP备20027696号
PHP交流群 也可以扫右边的二维码
侯体宗的博客