Hadoop的容错机制

一、技术层面

HDFS的副本机制

  • 先说HDFS的副本机制,HDFS上的每一份文件,默认是存储3个副本。一般来说,这三个副本会存放在多个地方,比如说同一个机房的不同机架,不同机房的机架,避免意外发生遭到团灭。在写入数据时,如果写入的DataNode挂掉,则整个任务失败;读取数据时,如果读取的DataNode挂掉,则通过Yarn寻找另一台网络拓扑距离最近的机器上的备份数据进行断点续传。

Yarn机制

  • Yarn则是一套集群资源管理和调度系统,由ResourceManager和NodeManager组成,NodeManager负责监控每一台设备上的系统资源状况,包括CPU、内存、当前节点上运行的任务、存储的文件块信息。NM定期向RM发送心跳包,如果超过10分钟没有收到,RM会认为这个节点已经挂了,然后启动复制操作,把低于指定值的副本重新再次备份

Zookeeper高可用

  • 高可用集群HA Cluster:如果NameNode挂掉,则整个集群都会挂掉。因此HDFS提供了HA架构,借助Zookeeper来完成对NameNode的管理。
  • 集群启动两个NameNode,其中一个是Active状态,另一个是standby待命状态。两个NN之间通过共享存储系统实现共享NameNode中的元数据同步。当ZK和NN之间通过心跳机制检测到Active状态的NN出现异常,比如说出现内存溢出、挂掉等意外情况,则另一个standby在信息完全同步后,状态切换为active。

二、运行时异常

任务异常

  • ApplicationMaster负责任务的容错,当某个MapTask失败,ApplicationMaster通过与RM之间的心跳机制反馈任务失败信息,然后RM会给该任务重新分配Container,ApplicationMaster把任务信息传给该节点上的NodeManager并通知其启动任务。
    • 一般来说,重启任务的节点会是一个新的节点。默认情况下一个任务重启超过4次后,就会宣告整个作业失败。最多尝试次数可以通过set mapreduce.map.maxattempts=n来设置。
    • 如果少数几个任务失败后该作业的一些结果可能还是可用的,这种情况下可以设置允许任务失败的最大百分比来设置set mapreduce.map.failures.maxpercent=n%;

AppMaster异常

  • ResourceManager负责ApplicationMaster的容错。当RM通过心跳机制检测到ApplicationMaster运行失败时,RM会重新分配Container资源并创建和启动一个新的ApplicationMaster。新的ApplicationMaster从HDFS上读取之前的状态并恢复,减少重新计算带来的开销。

NodeManager异常

  • 如果NodeManager由于崩溃或运行非常缓慢而失败,就会停止向ResourceManager发送心跳信息(或发送频率很低)。如果10分钟内没有收到一条心跳信息,ResourceManager将会通知该NodeManager并将其从节点池中移除以调度启用容器。
    • 在失败的NodeManager上运行的所有任务或AppMaster都用前两节描述的机制进行恢复。对于那些曾经在失败的NodeManager上运行且成功完成的MapTask,如果属于未完成的作业,那么AppMaster会安排他们重新运行。因为这些MapTask的中间输出保存在失败的NodeManager的本地文件系统中,可能无法被ReduceTask访问。
    • 如果应用程序的运行失败次数过高,那么NodeManager可能会被拉黑。对于MapReduce,如果一个NodeManager上有超过三个任务失败,AppMaster就会尽量将任务调度在不同的节点上。

NameNode异常

  • 高可用集群HA Cluster:以上的所有容错都是基于DataNode的故障问题进行考虑的,但是如果NameNode挂掉,则整个集群都会挂掉。因此HDFS提供了HA架构,借助Zookeeper来完成对NameNode的管理。
  • 集群启动两个NameNode,其中一个是Active状态,另一个是standby待命状态。两个NN之间通过共享存储系统实现共享NameNode中的元数据同步。当ZK和NN之间通过心跳机制检测到Active状态的NN出现异常,比如说出现内存溢出、挂掉等意外情况,则另一个standby在信息完全同步后,状态切换为active。
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值