0


Yarn增加新队列-----hive向Yarn提交任务后,Hadoop再次向Yarn提交任务阻塞

博学之,审问之,慎思之,明辨之,笃行之🏂

hive on spark搭建好后,任务提交会有问题,因为通过hive会话提交的任务一直存在且不会结束(除非关掉这个hive会话),根本原因是这些任务提交到了Yarn的同一个队列中,前面的任务没有执行完毕后面的任务不会执行,所以解决办法是增加一个Yarn队列,指定任务提交的队列,这样就不会出现任务的阻塞。

目录

  1. 情景复现:

搭建好hive on spark 后,在命令行直接进入hive会话,提交任务后,在

ResourceManager

上jps查看进程可以看到有个进程

ApplicationMaster

一直存在,打开

ResourceManager

的8088端口可以看到刚才提交的任务一直在default队列中而且状态是RUNNING运行状态,尽管刚才的SQL已经跑完了,但是任务还是处于运行状态,这是因为hive的会话一直开着,而且只要这个会话不关闭,他这个任务就不会结束。

在这里插入图片描述在这里插入图片描述在这里插入图片描述

查看任务:
在这里插入图片描述
我们再尝试着向Yarn提交一个任务,发现他一直卡在Runing job那里不动
在这里插入图片描述

再次查看web页面,发现任务已经提交上来
在这里插入图片描述退出hive会话,再次查看,发现任务开始运行…
在这里插入图片描述

  1. 原因:

梳理:原因是同一个队列中它前面的任务没有执行完,还没有轮到它执行。

分析:因为Yarn调度器默认是容量调度器,容量调度器中的多个队列可以并发执行,但是刚才的两个任务他们都提交到了同一个队列(default)中,而同一个队列中,又遵循先进先出(FIFO调度器)的原则,当前面的任务还没有执行完毕时,后面的任务不会执行,所以就出现了上面的现象。

优化:增加一个队列,将任务提交到不同的队列中。

  1. Yarn队列配置—增加队列

增加一个名字叫hive的队列

修改hadoop配置文件目录下的

capacity-scheduler.xml

配置文件

1.修改如下配置。增加hive队列,将默认队列的的资源容量设置为50%
在这里插入图片描述

2.增加如下配置

<property><name>yarn.scheduler.capacity.root.hive.capacity</name><value>50</value><description>
      hive队列的容量为50%
    </description></property><property><name>yarn.scheduler.capacity.root.hive.user-limit-factor</name><value>1</value><description>
      一个用户最多能够获取该队列资源容量的比例
    </description></property><property><name>yarn.scheduler.capacity.root.hive.maximum-capacity</name><value>80</value><description>
      hive队列的最大容量
    </description></property><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><description>
      访问控制,控制谁可以将任务提交到该队列
    </description></property><property><name>yarn.scheduler.capacity.root.hive.acl_administer_queue</name><value>*</value><description>
      访问控制,控制谁可以管理(包括提交和取消)该队列的任务
    </description></property><property><name>yarn.scheduler.capacity.root.hive.acl_application_max_priority</name><value>*</value><description>
      访问控制,控制用户可以提交到该队列的任务的最大优先级
    </description></property><property><name>yarn.scheduler.capacity.root.hive.maximum-application-lifetime</name><value>-1</value><description>
      hive队列中任务的最大生命时长,-1表示时间无限长
</description></property><property><name>yarn.scheduler.capacity.root.hive.default-application-lifetime</name><value>-1</value><description>
      default队列中任务的最大生命时长
</description></property>

3.将配置文件分发给各个机器
4.重启Hadoop集群
5.访问

ResourceManager

的8088端口,查看队列是否添加成功。
 可以看到hive队列已经添加成功。

在这里插入图片描述
6.要向此队列提交任务的话,可以在hive客户端执行以下命令:

hive (default)> set mapreduce.job.queuename=hive;

本文转载自: https://blog.csdn.net/qq_45796486/article/details/128258700
版权归原作者 阿年、嗯啊 所有, 如有侵权,请联系我们删除。

“Yarn增加新队列-----hive向Yarn提交任务后,Hadoop再次向Yarn提交任务阻塞”的评论:

还没有评论