【博学谷学习记录】超强总结,用心分享|Yarn执行流程及调度器

执行流程

  1. 客户端向RM提交任务请求
  2. RM会在某一台NM上分配一个Container,启动AppMaster让它管理整个任务的执行
  3. AppMaster向MR进行注册
  4. AppMaster向RM申请资源,RM以Container列表的形式返回资源列表,也就是告诉AppMaster找谁要资源
  5. AppMaster根据资源列表分别向对应主机申请资源
  6. 各个NM根据Container分别开辟对应资源,并且AppMaster会将MR任务各个MapTask和ReduceTask放在这些资源中运行
  7. 各个MapTask和ReduceTask在运行过程中,把状态实时汇报给AppMaster
  8. AppMaster会将任务执行的最终状态汇报给RM


调度器

概念
调度器就是规定多个任务如何分配计算机资源

分类
  1. 队列调度器(FIFO Scheduler)
该调度器,会将提交的Job放入一个队列中,先进入的Job会优先得到所有资源,可能会导致某个一个Job占用大部门资源,而且执行时间较长,会影响后期job的运行,所以该调取策略一般不用
  1. 容量调度器(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>
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
  1. 公平调度器(Fair Scheduler)
1. CDH(Cloudera Hadoop)默认就使用该调度器 
2. 不管来多少job任务,都会对总资源进行平均分配
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值