Yarn
-
主要内容
Yarn是一个资源调度平台,负责为运算程序提供服务器运算资源,相当于一个分布式的操作系统平台,而MapReduce等运算程序则相当于运行于操作系统之上的应用程序。
① Yarn的基本结构
Resource Manager:整个节点的老大
Node Manager:单个节点的老大
Application Master:节点上单个job的老大
Container:一个容器,job运行需要的资源都封装在容器中
② Yarn工作机制 / job提交过程
具体流程:
1 将MR程序提交到客户端所在的节点,客户端向RM申请一个application;
2 RM将应用程序的资源路径返还给客户端;
3 客户端将程序运行所需资源提交到HDFS上;
4 客户端将程序资源提交完毕后,向RM申请运行mrAppMaster;
5 RM将用户的请求初始化成一个Task任务,并将任务放到任务队列中;
6 其中一个NodeManager去任务队列领取Task任务;
7 领取完任务后,该NodeManager创建容器Container,并产生MRAppmaster;
8 Container从HDFS上拷贝资源到本地;
9 MRAppmaster向RM 申请运行MapTask容器;
10 RM将运行MapTask任务并分配给另外两/多个NodeManager,另两个NodeManager分别领取任务并创建容器;
11 MRAppmaster向两个接收到任务的NodeManager发送程序启动脚本,这两/多个NodeManager分别启动MapTask,MapTask对数据分区排序;
12 MrAppMaster等待所有MapTask运行完毕后,向RM申请容器,运行ReduceTask;
13 ReduceTask向MapTask获取相应分区的数据;
14 程序运行完毕后,MR会向RM申请注销自己;
要注意:将HDFS、MR和Yarn三者的工作流程结合起来。
③ 资源调度器
目前,Hadoop作业调度器主要有三种:FIFO、Capacity Scheduler和Fair Scheduler。Hadoop2.7.2默认的资源调度器是Capacity Scheduler。
三种调度器的比较:
(1)FIFO调度器:先进先出
(2)容量调度器:Capacity Scheduler
- 容量调度器是多个FIFO调度器并行的结果;
- 如何确定哪个任务先执行?
首先,计算队列中正在运行的任务数与分得的资源的比值,比值最小的队列最闲;(找出最先的队列)
其次,按照作业的优先级和提交时间顺序,同时考虑用户资源限制和内存限制对队列内任务排序;
(3)公平调度器:Fair Scheduler
- 支持多队列多用户,每个队列中的资源量可以配置,同一队列中的作业公平共享队列中所有资源;
- 每个队列中的 job 按照优先级分配资源,优先级越高分配越多;
- 在资源有限的情况下,每个 job 理想获得的计算资源与真实获得的计算资源的差值叫做缺额,同一队列中,job 的资源缺额越大,优先级越高,越优先执行,可以多个任务同时运行;
容量调度器是并行执行的
公平调度器是并发执行的
并行是一段时间内同时执行,具体到时刻只有一个执行,即多个线程同一时刻只有一个执行。
并发是同一时刻同时发生执行,即多个线程同一时刻执行。
来源:oschina
链接:https://my.oschina.net/u/4419899/blog/4316021