Yarn介绍:
- Yarn是Hadoop集群中的资源管理系统模块,从Hadoop2.0引入Yarn模块,Yarn可以为各类计算框架提供资源管理和调度,主要用于管理集群当中的资源(主要是服务器的各种硬件资源,包括CPU、内存、磁盘、网络I/O)以及调度运行在Yarn上面的各种任务
- 总结:调度系统资源、管理计算任务
Yarn的组成部分(Master/Slave架构):
- Resource Manager(Applications Manager应用程序管理器、Scheduler调度器):
- 处理Client请求
- 对Node Manager的资源进行统一管理和调度
- 给Application Master分配空闲Container运行并监控其状态
- Node Manager:
- 管理每个节点上的资源和任务
- 处理来自Resource Manager的命令,定时汇报本节点的资源使用情况和各个Container的运行状态
- 处理来自Application Master的命令,处理Application Master的Container启动/停止等请求
- Application Master:
- Client提交的应用程序均包含一个Application Master
- 负责应用的监控、跟踪应用执行状态、重启失败任务等
- 负责向Resouce Manager协调资源,为应用程序申请资源并分配任务
- 负责与Node Manager协同工作完成Task的执行和监控
- Container:
- Yarn中的资源抽象,它封装了某个节点的多维度资源(内存、CPU、磁盘、网络等)
Yarn执行任务底层机制:
- Client提交计算任务交给Resource Manager中的 Applications Manager
- Rsource Manager 中的 Applications Manager找一个Node Manage启动第一个 Container,并在其中启动Application Master
- Node Manager 中 Application Master与Resource Manager中的Applications Manager进行注册,就可以通过Resouce Manager进行Application Master状态的监控
- Applicatoin Master向Resouce Manager中的Scheduler申请计算资源
- Resouce Manager中的Scheduler以Container形式回复资源列表给Application Master
- Application Master让资源列表的主机分配资源,去执行具体的计算任务,启动Container并在其中执行具体的任务
- 执行具体的任务
- 向Application Master汇报任务执行情况
- Application Master向Resouce Manager中的Applications Manager汇报情况
- 任务结果返回Client
Container分两类:
- 由Resource Manager向Node Manager中申请和启动的Container,用来运行Application Master
- 由Application Master向Resource Manager申请资源,并由Application Masger和其他Node Manager通信来启动Container来执行各类任务
Resource Manager实现HA原理:
- 创建锁节点:
- 所有的RM启动时,会向Zookeeper竞争的创建一个临时子节点(锁节点),Zookeeper会保护最终只有一个RM可以创建成功,成功的RM为Active,失败的为Standby
- 注册Watcher监听:
- 所有Standby的RM会向该锁节点注册Watcher的事件监听,获得子节点的变更的事件通知
- 主备切换:
- 当Active状态的RM出现故障时,Zookeeper上的锁节点,因为是临时的,所以会被删除掉,其他Standby的RM节点会因为Watcher机制收到通知,开始重新竞争创建锁节点,更改状态
- 脑裂问题原理及解决办法:
- 原因:RM由于网络闪退或者自身故障未及时对外做出响应,出现了假死状态,导致触发了Zookeeper新一轮的主备切换,但是对于假死的RM自身来说,它仍然认为自己是Active,所以导致整个系统出现两个Active的RM节点
- 解决:在主备切换,RM竞争创建锁节点时,会携带Zookeeper的ACL权限进行限制,目的是独占该节点。在主备切换后,原来假死的RM在恢复后,会更新自己在Zookeeper的节点状态,但是发现自己的ACL权限不对,发现节点已经不是自己创建,会把自己更新为Standby状态。这样系统中就只有一个Active