这是我参与「第四届青训营 」笔记创作活动的第6天
1. YARN基础架构
YARN 主要由 ResourceManager、NodeManager、ApplicationMaster 和 Container 等组件构成。各组件的主要作用如下所示。
1)ResourceManager(RM)
- 处理客户端请求
- 监控NodeManager
- 启动或监控ApplicationMaster
- 资源的分配与调度
2) NodeManager(NM)
- 管理单个节点上的资源
- 处理来自ResourceManager的命令
- 处理来自ApplicationMaster的命令
3)ApplicationMaster(AM)
- 为应用程序申请资源并分配给内部任务
- 任务的监控与容错
4)Container
Container是 YARN 中的资源抽象,它封装了某个节点上的多维度资源,如内存、CPU、磁盘、网络等。
2. YARN工作机制
(1)MapReduce 程序提交到客户端所在的节点;
(2)YarnRunner 向 ResourceManager 申请一个 Application;
(3)RM 将该应用程序的资源路径返回给 YarnRunner;
(4)该程序将运行所需资源提交到 HDFS 上;
(5)程序资源提交完毕后,申请运行MRAppMaster(MapReduce程序运行中负责整个程序的过程调度及状态协调的实例进程);
(6)RM 将用户的请求初始化成一个 Task;
(7)其中一个 NodeManager 领取到Task任务;
(8)该 NodeManager 创建容器 Container,并产生 MRAppmaster;
(9)Container 从 HDFS 上拷贝资源到本地;
(10)MRAppmaster 向 RM 申请运行 MapTask 资源;
(11)RM 将运行 MapTask 任务分配给另外两个 NodeManager,另两个 NodeManager 分别领取任务并创建容器;
(12)MR 向两个接收到任务的 NodeManager 发送程序启动脚本,这两个 NodeManager 分别启动 MapTask,MapTask对数据分区排序;
(13)MRAppMaster 等待所有 MapTask 运行完毕后,向 RM 申请容器,运行 ReduceTask;
(14)ReduceTask 向 MapTask 获取相应分区的数据;
(15)程序运行完毕后,MapReduce 会向 ResourceManager 申请注销自己。
3. YARN 调度器和调度算法
目前,Hadoop作业调度器主要有三种:先进先出调度器(FIFO)、容量调度器(Capacity Scheduler) 和 公平调度器(Fair Scheduler)。
Apache Hadoop3.1.3 默认的资源调度器是Capacity Scheduler; CDH框架默认调度器是Fair Scheduler。
3.1 先进先出调度器(FIFO)
FIFO调度器(First In First Out): 单队列,根据提交作业的先后顺序,先来先服务。
优点: 简单易懂;
缺点: 不支持多队列,生产环境很少使用。
3.2 容量调度器(Capacity Scheduler)
Capacity Scheduler 是 Yahoo 开发的多用户调度器。
(1)容量调度器特点
1)多队列: 每个队列可配置一定的资源量,每个队列采用 FIFO调度策略;
2)容量保证: 管理员可为每个队列设置 资源最低保证 和 资源使用上限;
3)灵活性: 如果一个队列中的资源有剩余,可以暂时共享给那些需要资源的队列,而一旦该队列有新的应用程序提交,则其他队列借调的资源会归还给该队列;
4)多租户:
支持 多用户共享集群 和 多应用程序 同时进行;
为防止同一用户的作业独占队列中的资源,该调度器会对同一用户提交的作业所占资源量进行限定。
(2)容量调度器资源分配算法
3.3 公平调度器(Fair Scheduler)
Fair Schedulere 是 Facebook 开发的多用户调度器。
(1) 公平调度器特点
(2) 公平调度器---缺额
- 公平调度器设计目标是:在时间尺度上,所有作业获得公平的资源。某一个时刻一个作业应获资源和实际获取资源的差距叫做 "缺额";
- 调度器会优先为缺额大的作业分配资源
(3) 公平调度器队列资源分配方式