当前位置: 首页 > news >正文

YARN节点故障的容错方案

YARN节点故障的容错方案

  • 1. RM高可用
    • 1.1 选主和HA切换逻辑
  • 2. NM高可用
    • 2.1 感知NM节点异常
    • 2.2 异常NM上的任务处理
  • 4. 疑问和思考
    • 4,1 RM感知NM异常需要10min,对于app来说是否太长了?
  • 5. 参考文档

本文主要探讨yarn集群的高可用容错方案和容错能力的探讨。涉及RM和NM相关组件,在出现单机故障时相关的容错方案。

更多关于分布式系统的架构思考请参考文档关于常见分布式组件高可用设计原理的理解和思考


1. RM高可用

1.1 选主和HA切换逻辑

RM(ResourceManager)的HA机制主要依靠zk完成。整体的逻辑跟HDFS的NN逻辑整体上一致,也略有差别,可以参考 HDFS节点故障的容错方案

相同点
1, RM使用zk的临时锁节点(ActiveStandbyElectorLock)进行选主
2,其他节点的watch机制跟hdfs的逻辑也一致

不同点
1, RM没有另外涉及zkfc辅助选主,而是RM自己完成了相关的逻辑
2,YARN集群没有涉及fencing逻辑。
在这里插入图片描述

2. NM高可用

NM是运行在单个节点上的代理 ,主要职责有

  1. 管理Hadoop集群中单个计算节点,功能包括与ResourceManager保持通信
  2. 管理Container的生命周期、监控每个Container的资源使用(内存、CPU等)情况、追踪节点健康状况、管理日志和不同应用程序用到的附属服务等
  3. 向ResourceManager汇报各个Container运行状态和节点健康状况,并领取有关Container的命令(比如清理Container)。

2.1 感知NM节点异常

NM启动后通过RPC函数ResourceTracker#registerNodeManager向RM注册,之后将被加入到NMLivenessMonitor中进行监控。它必须周期性通过RPC函数ResourceTracker#nodeHeartBeat向RM汇报心跳以表明自己还活着,如果一段时间内(默认是10min)内为汇报心跳,则RM宣布它已经死亡,所以正在运行在它上面的Container将被回收。

当RM判断NM宕机后,需要

  1. RM剔除对应的NM,并将异常NM上的container标记死亡,后续container不会被分配到对应的NM
  2. 通知AM,告知异常NM上的container已经死亡,由AM决定下一步的任务行为。

2.2 异常NM上的任务处理

由于在yarn集群中,任务的管理是通过AM进行管理的,因此RM感知到NM异常后,标记对应的containier死亡,并需要通知对应的AM。NM或者RM并不负责运行在上面的app运行状态,而是由AM来决定下一步动作(AM在跟RM申请一个NM执行container,还是标记app失败等)。

4. 疑问和思考

4,1 RM感知NM异常需要10min,对于app来说是否太长了?

视情况而定。由于RM感知NM异常,需要10min的时间,然后才会通知AM,这个时间相对于大多数任务而言还是比较长的。如果任务对数据的实时性要求很高,建议AM创建container后,container主动给AM汇报心跳,来决定业务行为,能够感觉相关的业务需求来进行开发。通常flink、spark任务都是过该思路进行开发的。

5. 参考文档

  • 一文搞定Journal Node原理
http://www.lryc.cn/news/285720.html

相关文章:

  • C++后端笔记
  • JavaEE中什么是Web容器?
  • MySQL 8.0 架构 之错误日志文件(Error Log)(1)
  • 51单片机实验课一
  • 【.NET Core】多线程之线程池(ThreadPool)详解(一)
  • 圆的参数方程是如何推导的?
  • sqlmap使用教程(2)-连接目标
  • c++ http第一个服务
  • 深入Android S (12.0) 探索Framework之输入子系统InputReader的流程
  • 【cucumber】cluecumber-report-plugin生成测试报告
  • 华为欧拉操作系统结合内网穿透实现固定公网地址SSH远程连接
  • 加速 Selenium 测试执行最佳实践
  • c语言野指针
  • 【MySQL】where和having的区别
  • npm pnpm yarn 报错或常见问题处理集锦
  • 【Git】常用的Git操作集合
  • JavaScript库jquery的使用方法
  • Vue (v-bind指令、el与data的两种写法、理解MVVM、数据代理、V-no事件处理、双向数据绑定V-model、登陆页面实现
  • SpringBoot - SpringBoot手写模拟SpringBoot启动过程
  • 40. 组合总和 II - 力扣(LeetCode)
  • 第15届蓝桥杯嵌入式省赛准备第二天总结笔记(使用STM32cubeMX创建hal库工程+按键输入)
  • 【论文阅读】One For All: Toward Training One Graph Model for All Classification Tasks
  • Python多线程爬虫——数据分析项目实现详解
  • unity全局音量管理/全局音量设置与音量设置界面(含静音功能)
  • C++ vector 数组转换、查找、最大最小值、排序、排行的几种用法
  • vmware 安装Rocky-9.3系统
  • C++提高编程——模板
  • 单线程、同步、异步、预解析、作用域、隐式全局变量、对象创建、new
  • 《设计模式的艺术》笔记 - 外观模式
  • sql 查询时间范围内的数据