Yarn框架
介绍
1、Hadoop包含三个组件:HDFS、MapReduce、Yarn
2、Yarn是Hadoop2.x出现的
3、Yarn主要是MapReduce运行提供资源
Yarn的架构
1、Yarn是一个主从架构
主节点:ResourceManager
从节点:NodeManager
2、ResourceManager功能
1)接受客户端发起的任务,并将该任务交给NodeManager去执行
2)划分整个集群的计算资源
3、NodeManager
1)真正的去执行计算任务
2)真正的资源的提供者(内存和CPU)
3)NodeManager会定时向ResourceManager汇报资源使用情况,并保持心跳
4、AppMaster(Application Master)
1)每启动一个任务job,就会启动一个该任务的管理者AppMaster,有多少个任务就会有多少个AppMaster
2)AppMaster负责整个任务从提交到结束整个的过程
5、Container
1)Container可以理解为一个抽象的资源容器,是资源分配的单位,本质上是Java类对象
2)Container内部包含的计算资源
Container {node1:2G-2vcore,node2:4G:4vcore}
3)Container本身没有资源,它只是告诉Job,去哪里要多少资源
(重点)任务在Yarn上的执行流程
(重点)Yarn的调度器
-
概念
当我们客户端向Yarn一次提交多个任务时,Yarn如何去给多个任务分配资源,此时就需要使用调度器,通俗的来讲,调度器就是来规定多个任务如何分配Yarn的资源
-
调度器的分类
-
1、队列调度器(FIFO Scheduler)
该调度器,会将提交的Job放入一个队列中,先进入的Job会优先得到所有资源,可能会导致某个一个Job占用大部门资源,而且执行时间较长,会影响后期job的运行,所以该调取策略一般不用
-
-
2、容量调度器(Capacity Scheduler)
1、Apache的Hadoop默认使用的就是该调度器
2、容量调度器是将整个资源划分成多个队列,每一个队列占用一部分资源
3、在提交任务时需要指定你要使用哪一个队列的资源,如果没有指定则使用默认队列
4、容量调度器默认只有一个队列:default队列,如果想要建立其他队列则需要手动来设置
5、执行任务的队列必须是叶子,也就是队列树中最末端队列
6、给队列设置的资源占比都是资源的下限比例,默认最多可以使用%100的全部资源
-
如果手动配置队列
#如果你想让你的Yarn集群使用某种调度器,则需要在yarn-site.xml中添加以下标签: -- 容量调度器 <property> <name>yarn.resourcemanager.scheduler.class</name> <value>org.apache.hadoop.yarn.server.resourcemanager.scheduler.capacity. CapacityScheduler</value> </property> ###############容量调度器的配置步骤#########################3 1、在etc/hadoop目录下备份capacity-scheduler.xml文件 cp capacity-scheduler.xml capacity-scheduler.xml_bak #备份之前的调度器配置文件 2、在node1上,设置调度器队列参数,将原来 capacity-scheduler.xml文件内容删除,添加以下内容 <?xml version="1.0"?> <configuration> <!-- 分为三个队列,分别为default,prod和dev --> <property> <name>yarn.scheduler.capacity.root.queues</name> <value>default,prod,dev</value> </property> <!--default队列容量为80% --> <property> <name>yarn.scheduler.capacity.root.default.capacity</name> <value>80</value> </property> <!-- 设置prod队列10% --> <property> <name>yarn.scheduler.capacity.root.prod.capacity</name> <value>10</value> </property> <!-- 设置dev队列10% --> <property> <name>yarn.scheduler.capacity.root.dev.capacity</name> <value>10</value> </property> <!-- 设置dev队列可使用的资源上限为75% --> <property> <name>yarn.scheduler.capacity.root.dev.maximum-capacity</name> <value>75</value> </property> <!-- dev继续分为两个队列,分别为eng和science --> <property> <name>yarn.scheduler.capacity.root.dev.queues</name> <value>eng,science</value> </property> <!-- 设置eng队列50% --> <property> <name>yarn.scheduler.capacity.root.dev.eng.capacity</name> <value>50</value> </property> <!-- 设置science队列50% --> <property> <name>yarn.scheduler.capacity.root.dev.science.capacity</name> <value>50</value> </property> </configuration> 3、在node1上刷新队列 yarn rmadmin -refreshQueues 4、给队列提交任务 hadoop jar \ /export/server/hadoop-3.3.0/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.3.0.jar \ pi \ -Dmapreduce.job.queuename=prod \ 2 10000
-
3、公平调度器(Fair Scheduler)
1、CDH(Cloudera Hadoop)默认就使用该调度器 2、不管来多少job任务,都会对总资源进行平均分配