0


【Hadoop】YARN多资源队列配置及使用实践

文章目录

   由于MapReduce默认采用Capacity Scheduler(详见【Hadoop】YARN简述),因此理论上可以存在多个队列,而默认只有一个队列(default),现有需求:额外创建两个队列分别为online和offline,将这三个队列的资源分别分配为70%、10%、20%,且允许在资源不足时借用其他队列的资源,但最多不能超过70%(online队列里面运行实时任务,offline队列里面运行离线任务,MapReduce属于离线任务),最后将WordCount任务提交到offline队列执行。

1. 多资源队列配置

   资源队列的配置需要修改
capacity-scheduler.xml

文件,该文件位于

hadoop-3.2.0/etc/hadoop/

目录。

  1. 设置队列名称 由于yarn.scheduler.capacity.root.queues标签已经存在了,只需在<value>中添加另外两个队列的名称即可。
<property><name>yarn.scheduler.capacity.root.queues</name><value>default,online,offline</value><description>
      The queues at the this level (root is the root queue).
    </description></property>
  1. 设置各队列资源分配 向capacity-scheduler.xml文件中添加如下代码:
<property><name>yarn.scheduler.capacity.root.default.capacity</name><value>70</value><description>default队列70%</description></property><property><name>yarn.scheduler.capacity.root.online.capacity</name><value>10</value><description>online队列10%</description></property><property><name>yarn.scheduler.capacity.root.offline.capacity</name><value>20</value><description>offline队列20%</description></property>
  1. 设置各队列资源使用上限 这里需要注意一点,使用PC虚拟机学习时如果资源卡得太紧(设置最大使用上限等于资源分配比例),有可能导致向资源分配少的队列中提交Job时,无法启动Map任务。向capacity-scheduler.xml文件中添加如下代码:
<property><name>yarn.scheduler.capacity.root.default.maximum-capacity</name><value>70</value><description>
      The maximum capacity of the default queue. 
    </description></property><property><name>yarn.scheduler.capacity.root.online.maximum-capacity</name><value>70</value><description>online队列可使用的资源上限.</description></property><property><name>yarn.scheduler.capacity.root.offline.maximum-capacity</name><value>70</value><description>offline队列可使用的资源上限.</description></property>

2. 指定队列提交任务

  1. WordCount代码修改

    原项目代码见【Hadoop】MapReduce分布式计算实践(统计文本单词数量),在main函数中添加如下代码:
    
String[] otherArgs =newGenericOptionsParser(configuration, args).getRemainingArgs();
   上面添加的这段代码会处理一些系统参数,并留下用户真正想传入的其他参数otherArgs,因为传参数的途径发生变化,所以修改输入输出路径相关代码,把所有的
args[0]

改为

otherArgs[0]

GenericOptionsParser

中处理

-D

参数的源码如下:

if(line.hasOption('D')){String[] property = line.getOptionValues('D');for(String prop : property){String[] keyval = prop.split("=",2);if(keyval.length ==2){
             conf.set(keyval[0], keyval[1],"from command line");}}}
   源码中以空格为分隔符提取了
-D

参数后的字符串数组,对数组中每个字符串使用

=

作为分隔符切分,若且分出两部分,则配置Configration,否则作为用户传入的其他参数,在程序中正常引用即可。
2. 提交任务

-D

参数后设置任务要提交到的调度器队列,其余参数的解释见【Hadoop】MapReduce分布式计算实践(统计文本单词数量),提交任务的命令如下:

hadoop jar db_hadoop-1.0-SNAPSHOT-jar-with-dependencies.jar com.imooc.Hadoop.YARN.WordCountJobYARN -D mapreduce.job.queuename=offline /words.txt /out3

本文转载自: https://blog.csdn.net/qq_43510916/article/details/128824957
版权归原作者 chaoql 所有, 如有侵权,请联系我们删除。

“【Hadoop】YARN多资源队列配置及使用实践”的评论:

还没有评论