YARN资源调度知识概要

Yarn架构

YARN资源调度知识概要

ResourceManager(rm) 处理客户端请求、启动 / 监控 ApplicationMaster 、监控 NodeManager 、资源分配与调度;
NodeManager(nm) 单个节点上的资源管理、处理来自 ResourceManager 的命令、处理来自ApplicationMaster的命令;
ApplicationMaster(am) 数据切分、为应用程序申请资源,并分配给内部任务、任务监控与容错。
Container 对任务运行环境的抽象,封装了 CPU 、内存等多维资源以及环境变量、启动命令等任务运行相关的信息。
二,工作机制
YARN资源调度知识概要
作业提交过程之YARN
作业提交
1 步: Client 调用 job.waitForCompletion 方法,向整个集群提交 MapReduce 作业。
2 步: Client RM 申请一个作业 id
3 步: RM Client 返回该 job 资源的提交路径和作业 id
4 步: Client 提交 jar 包、切片信息和配置文件到指定的资源提交路径。
5 步: Client 提交完资源后,向 RM 申请运行 MrAppMaster
作业初始化
6 步:当 RM 收到 Client 的请求后,将该 job 添加到容量调度器中。
7 步:某一个空闲的 NM 领取到该 Job
8 步:该 NM 创建 Container ,并产生 MRAppmaster
9 步:下载 Client 提交的资源到本地。
任务分配
10 步: MrAppMaster RM 申请运行多个 MapTask 任务资源。
11 步: RM 将运行 MapTask 任务分配给另外两个 NodeManager ,另两个 NodeManager
别领取任务并创建容器。
任务运行
12 步: MR 向两个接收到任务的 NodeManager 发送程序启动脚本,这两个 NodeManager
分别启动 MapTask MapTask 对数据分区排序。
13 步: MrAppMaster 等待所有 MapTask 运行完毕后,向 RM 申请容器,运行 ReduceTask
14 步: ReduceTask MapTask 获取相应分区的数据。
15 步:程序运行完毕后, MR 会向 RM 申请注销自己。
进度和状态更新
YARN 中的任务将其进度和状态返回给应用管理器 , 客户端每秒 ( 通过mapreduce.client.progressmonitor.pollinterval设置 ) 向应用管理器请求进度更新 , 展示给用户。
作业完成
除了向应用管理器请求作业进度外 , 客户端每 5 秒都会通过调用 waitForCompletion() 来检查作业是否完成。时间间隔可以通过mapreduce.client.completion.pollinterval 来设置。作业完成之后, 应用管理器和 Container 会清理工作状态。作业的信息会被作业历史服务器存储以备 之后用户核查。
三,yarn的调度策略
Hadoop 作业调度器主要有三种: FIFO Capacity Scheduler Fair Scheduler Hadoop2.9.2 默认的资源调度器是Capacity Scheduler
 
YARN资源调度知识概要
 
YARN资源调度知识概要
Fair Scheduler (公平调度器, CDH版本的hadoop 默认使用的调度器)Fair调度器的设计目标是为所有的应用分配公平的资源(对公平的定义可以通过参数来设置)。公平调度在也可以在多个队列间工作。举个例子,假设有两个用户A B ,他们分别拥有一个队列。当A 启动一个 job B 没有任务时, A 会获得全部集群资源;当 B 启动一个 job 后, A job 会继续运 行,不过一会儿之后两个任务会各自获得一半的集群资源。如果此时B 再启动第二个 job 并且其它job还在运行,则它将会和 B 的第一个 job 共享 B 这个队列的资源,也就是 B 的两个 job 会用于四分之一的集群资源,而A job 仍然用于集群一半的资源,结果就是资源最终在两个用户之间平等的共享。
 
四, Yarn 多租户资源隔离配置
 
YARN资源调度知识概要
 
 
YARN资源调度知识概要