24.hadoop系列之Yarn容量调度器实践

在中小型企业中,我们一般配置为容量调度器

请先检查本地host配置

127.0.0.1 datanode
127.0.0.1 namenode
127.0.0.1 resourcemanager
127.0.0.1 nodemanager
127.0.0.1 nodemanager2
127.0.0.1 historyserver

1.容器调度器配置多队列

需求 1:default 队列占总内存的40%,最大资源容量占总资源60%,hive 队列占总内存
的60%,最大资源容量占总资源80%。
需求 2:配置队列优先级

多队列配置需要/opt/hadoop-3.2.1/etc/hadoop/capacity-scheduler.xml,我们先将容器中该文件拷贝出来

docker cp fd7a9150237:/opt/hadoop-3.2.1/etc/hadoop/capacity-scheduler.xml .

对于docker-compose.yml中所有容器进行挂载

volumes:
      - ./capacity-scheduler.xml:/opt/hadoop-3.2.1/etc/hadoop/capacity-scheduler.xml

同时我们对nodemanager映射端口8042,historyserver映射端口8188,并且新增1个nodemanager节点【笔者执行WordCount时单节点资源不够导致mapreduce无法进行】

  nodemanager:
    ports:
      - 8042:8042
  nodemanager2:
    image: bde2020/hadoop-nodemanager:2.0.0-hadoop3.2.1-java8
    container_name: nodemanager2
    hostname: nodemanager2
    ports:
      - 8043:8042
    environment:
      SERVICE_PRECONDITION: "namenode:9000 namenode:9870 datanode:9864 resourcemanager:8088"
    volumes:
      - ./capacity-scheduler.xml:/opt/hadoop-3.2.1/etc/hadoop/capacity-scheduler.xml
    env_file:
      - ./hadoop.env
  historyserver:
    ports:
      - 8188:8188

【修改】capacity-scheduler.xml中配置

<!-- 指定多队列,增加 hive 队列 -->
<property>
    <name>yarn.scheduler.capacity.root.queues</name>
    <value>default,hive</value>
</property>
<!-- 降低 default 队列资源额定容量为 40%,默认 100% -->
<property>
    <name>yarn.scheduler.capacity.root.default.capacity</name>
    <value>40</value>
</property>
<!-- 降低 default 队列资源最大容量为 60%,默认 100% -->
<property>
    <name>yarn.scheduler.capacity.root.default.maximum-capacity</name>
    <value>60</value>
</property>

【新增】capacity-scheduler.xml中配置

<!-- 指定 hive 队列的资源额定容量 -->
<property>
 <name>yarn.scheduler.capacity.root.hive.capacity</name>
 <value>60</value>
</property>
<!-- 用户最多可以使用队列多少资源,1 表示 -->
<property>
 <name>yarn.scheduler.capacity.root.hive.user-limit-factor</name>
 <value>1</value>
</property>
<!-- 指定 hive 队列的资源最大容量 -->
<property>
 <name>yarn.scheduler.capacity.root.hive.maximum-capacity</name>
 <value>80</value>
</property>
<!-- 启动 hive 队列 -->
<property>
 <name>yarn.scheduler.capacity.root.hive.state</name>
 <value>RUNNING</value>
</property>
<!-- 哪些用户有权向队列提交作业 -->
<property>
 <name>yarn.scheduler.capacity.root.hive.acl_submit_applications</name>
 <value>*</value>
</property>
<!-- 哪些用户有权操作队列,管理员权限(查看/杀死) -->
<property>
 <name>yarn.scheduler.capacity.root.hive.acl_administer_queue</name>
 <value>*</value>
</property>
<!-- 哪些用户有权配置提交任务优先级 -->
<property>
 <name>yarn.scheduler.capacity.root.hive.acl_application_max_priority</name>
 <value>*</value>
</property>
<!-- 如果 application 指定了超时时间,则提交到该队列的 application 能够指定的最大超时
时间不能超过该值,-1不超时 -->
<property>
 <name>yarn.scheduler.capacity.root.hive.maximum-application-lifetime</name>
 <value>-1</value>
</property>
<!-- 如果 application 没指定超时时间,则用 default-application-lifetime 作为默认
值 -->
<property>
 <name>yarn.scheduler.capacity.root.hive.default-application-lifetime</name>
 <value>-1</value>
</property>

【修改】hadoop.env文件,根据情况相应调整

MAPRED_CONF_mapred_child_java_opts=-Xmx1024m
MAPRED_CONF_mapreduce_map_memory_mb=2048
MAPRED_CONF_mapreduce_reduce_memory_mb=2048
MAPRED_CONF_mapreduce_map_java_opts=-Xmx1024m
MAPRED_CONF_mapreduce_reduce_java_opts=-Xmx2048m

配置好后,再次执行docker-compose up -d会recreate容器

访问http://resourcemanager:8088/cluster/scheduler后可以看到hive队列已出现

2.向hive队列中提交任务

hadoop jar /opt/hadoop-3.2.1/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.2.1.jar wordcount -D mapreduce.job.queuename=hive /shenjian/input /shenjian/output

当然我们也可以通过在WordCountDriver中配置

conf.set("mapreduce.job.queuename", "hive");

一会可以在FINSHED中看到完成信息,如下图所示

点击ID,可以点击LOGS查看具体日志信息,当然失败时会有不同的文件生成,点击查看错误日志即可

3.任务优先级设置

在hadoop.env中配置

// 任务最高优先级为5
YARN_CONF_yarn_cluster_max___application___priority=5

提交优先级高的任务

hadoop jar /opt/hadoop-3.2.1/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.2.1.jar pi -D mapreduce.job.priority=5 5 2000000

也可以通过以下命令修改正在执行的任务的优先级

yarn application -appID <Application ID> -updatePriority 优先级

欢迎关注公众号算法小生与我沟通交流

猜你喜欢

转载自blog.csdn.net/SJshenjian/article/details/129371513