Hadoop权威指南4
第4章 关于YARN
Apache YARN(Yet Another Resource Negotiator)是Hadoop的集权资源管理系统。
4.1 剖析YARN应用的运行机制
4.1.1 资源请求
YARN有一个灵活的资源请求模型。当请求多个容器时,可以指定每个容器需要的计算机资源数量(内存和CPU),还可以指定对容器的本地性限制要求。
Spark在最开始提出所有资源的请求。MapReduce分为两步,最开始请求map任务的容器,reduce任务容器在后期申请。
4.1.2 应用生命期
- 一个用户作业对于一个应用,如MapReduce
- 作业的每个工作流或每个用户对话(可能并无关联性)对应一个应用,如Spark
- 多个应用共享一个长期运行的应用,如Apache Slider
4.1.3 构建YARN应用
从无到有编写一个YARN应用是一件相当复杂的事。有很多现成的应用。如Spark、storm等等都写好的应用
4.2 YARN与MapReduce1相比
-
可扩展性(Scalability)
MapReduce1,节点数4000,任务数达到40000时,是瓶颈,YARN可达到10000节点100000任务 -
可用性(Availability)
YARN分而治之,先为资源管理器提供高可用性,再为YARN应用提供高可用性 -
利用率(Utilization)
MapReduce1中将slot静态分为map slot和reduce slot,不可变。
YARN中容器,不固定,动态分配,更合理 -
多租户(Multitenancy)
YARN支持多种应用,MapReduce,Spark等等,甚至1个YARN上有MapReduce的不同版本
4.3 YARN中的调度
4.3.1 调度选项
YARN中有三种调度器:FIFO调度器,容量调度器和公平调度器。
4.3.2 容量调度器配置
- 容量调度器允许多个组织共享一个Hadoop机器,每个组织配置一个队列,队列内部使用FIFO策略
- 一般单个作业使用的资源不好超过其队列容量,但若有好多作业,且队列中资源不够,同时集群中还有空闲资源,是可以多分配资源的。弹性队列
- 队列资源分配不会超过队列的最大容量限制,若没有则不受限制
- 队列放置,取决于应用本身。MapReduce为属性mapreduce.job.queuename。默认为default队列
4.3.3 公平调度器配置
公平调度器在队列之间也实现公平调度
-
启用公平调度器
由yarn-site.xml中的yarn.resourcemanager.scheduler.class决定,默认为容量调度器(cdh默认为公平调度器) -
队列配置
- 由fair-scheduler.xml文件对公平调度器进行配置,若没有该文件:每个应用放置在一个以用户名命名的队列中,队列是在用户提交第一个应用时动态创建的。
- 队列有权重元素,用于公平共享计算。
- 每个队列可以有不同的调度策略。默认公平调度,也支持FIFO和DRF(主资源公平调度),由schedulingPolicy元素覆盖
-
队列放置
公平调度器使用一个基于规则的系统来确定应用放到哪个队列:
-
抢占
公平调度器支持 抢占 功能
4.3.4 延迟调度
为了追求本地性,不急于分配资源,等一段时间,实在没有本地资源了,再分配非本地资源用于计算。
容量调度器和公平调度器都支持延迟调度
4.3.5 主导资源公平性
应用请求的多种资源(cpu、内存等)中,哪种资源占集群总资源比重多,就以该比重来计算公平性。
4.4 延伸阅读
《Hadoop YARN权威指南》