文章目录
- YARN基础架构
- YARN工作原理
- YARN调度器和调度算法
- 先进先出调度器
- 容量调度器
- 公平调度器
- YARN常用命令
YARN基础架构
YARN是Hadoop集群的资源管理和调度系统,它负责为各种分布式计算任务分配和管理资源,包含以下组件:ResourceManager,NodeManager,ApplicationMaster, Container。
- ResourceManager(RM):负责整个集群的资源管理和分配,接收来自NodeManager的资源使用报告,并根据策略分配资源给各个应用程序。
- NodeManager(NM):运行在单个节点上,负责管理单个节点的资源,如CPU和内存,并向ResourceManager汇报资源使用情况。
- ApplicationMaster(AM):负责为每个应用程序申请资源和任务调度,向ResourceManager申请资源,再与NodeManager交互以启动和监控任务。
- Container :YARN中的资源抽象,封装了某个节点上的资源,如内存和CPU等,Container是执行任务的基本单位。
YARN工作原理
一开始提交 MR 程序到客户端所在节点,然后YarnRunner 向 ResourceManager 申请一个 Application,ResourceManager 将运行该应用程序的资源提交路径返回给 YarnRunner,应用程序根据路径将运行所需资源(运行jar包和切片参数等信息)提交到 HDFS 上,资源提交完毕后,向ResourceManager 申请运行 mrAppMaster,ResourceManager 将用户的请求初始化为一个Task放入FIFO队列中,NodeManager 再从FIFO队列领取Task 后创建Container容器,Container 从 HDFS 上下载运行资源到本地,然后运行 MRAppmaster程序,MRAppmaster 向 ResourceManager 申请运行 MapTask ,ResourceManager 将请求封装为task放入队列中,其他 NodeManager从队列领取任务并创建容器,MRAppmaster 向领取到任务的 NodeManager 发送程序启动脚本,NodeManager 执行 MapTask,执行完后数据存储在分区,MrAppMaster 等所有 MapTask 执行完,向 ResourceManager 申请容器运行 ReduceTask,ReduceTask 向 MapTask 获取执行结果并汇总,程序运行完毕后,MrAppMaster 会向 ResourceManager 申请注销自己。
YARN调度器和调度算法
Hadoop作业调度器主要有三种,分别是先进先出调度器(FIFO)、容量调度器(Capacity Scheduler)和公平调度器(Fair Scheduler), 在Hadoop3.1.3中, 默认的资源调度器是容量调度器,CDH 框架默认调度器是公平调度器。
先进先出调度器
FIFO 调度器(First In First Out):一个队列根据作业提交的先后顺序,先来先服务。
优点:易于理解,实现简单。
缺点:只支持单个队列,无法满足多用户或多应用程序同时运行。
容量调度器
容量调度器是Yahoo开发的多用户调度器,它支持多队列,每个队列可以配置一定的资源量。
特点:
-
多队列:每个队列可配置一定的资源量,采用FIFO调度策略。
-
容量保证:可以为每个队列设置资源最低保证和使用上限。
-
灵活性:当队列资源有剩余时,可以先借给其他队列使用,等该队列有新的应用程序提交时,其他队列需要归还资源给该队列。
-
多租户:支持多用户共享集群资源,为了防止单个用户作业独占队列资源,可以限定用户作业所占的资源量。
容量调度器的资源分配策略
-
队列资源分配方式
从根节点出发,使用dfs算法,系统优先选择资源占用率最低的队列来分配资源。
-
作业资源分配方式
默认情况下,根据作业提交的优先级以及提交的时间先后顺序分配。
-
容器资源分配方式
首先按照容器的优先级分配,若优先级相同,则根据数据本地性原则进行分配:首选任务和数据位于同一节点的情况,其次是任务和数据在同一机架但不同节点的情况,最后是任务和数据既不在同一节点也不在同一机架的情况。
公平调度器
公平调度器是一个多用户调度器,具有容量调度器以上的所有特点。公平调度器设计目标是:在时间维度上,所有的作业能够得到公平的资源分配,一个作业应获的资源和实际获取资源的差距叫缺额,公平调度器会优先为缺额大的作业分配更多的资源,从而缩小各个作业之间的资源差距。
与容量调度器的区别
- 调度策略不同
容量调度器:优先选择资源利用率低的队列分配资源。
公平调度器:优先选择资源缺额比例大的队列分配资源。
- 队列资源分配方式不同
容量调度器:FIFO、 DRF
公平调度器:FIFO、FAIR、DRF
公平调度器的资源分配策略
1)FIFO策略
公平调度器若采用此策略就相当于容量调度器。
2)Fair策略(默认的实现方式)
Fair基于公平算法分配资源,若一个队列中有两个应用程序同时运行,则每个应用程序可得到1/2的资源,如果有三个应用程序同时运行,则每个应用程序可得到1/3的资源。
资源的分配流程和容量调度器一致,按照队列,作业,容器的顺序分配,每一步都是按照公平策略分配资源。
YARN常用命令
启动YARN
./start-yarn.sh
再启动历史服务器
mapred --daemon start historyserver
访问localhost:19888/jobhistory/app查看YARN的WEB UI页面
1)查看所有任务
yarn application -list
2)Kill 掉任务
yarn application -kill applicationId
3)查看Container日志
yarn logs -applicationId -containerId
4)查看Application日志
yarn logs -applicationId
5)查看所有容器
yarn container -list
6)查看队列
yarn queue -status default
7)查看节点
yarn node -list -all