平台:H3C DataEngine
表现形式:启动hive shell第一次执行走计算流程的sql时,打开计算引擎的session时卡死,可视化查看任务正常提交,就是无法执行。
原因解释:无论什么yarn调度器默认都是单队列,H3C使用的是公平调度器,但队列中存在其他正在执行的任务导致队列资源占用达到10%,导致后面的任务需要等待前面的任务走完,卡死的根本原因是安装了spark,导致后台会启动spark session且一直运行,导致之后的任务无法提交。
解决方案:配置yarn多队列
<?xml version="1.0"?>
<allocations>
<userMaxAppsDefault>30000</userMaxAppsDefault>
<queue name = "root">
<queue name="tez">
<weight>5</weight>
<schedulingPolicy>fair</schedulingPolicy>
</queue>
<queue name="default">
<weight>5</weight>
</queue>
</queue>
<queuePlacementPolicy>
<rule name="specified" create="false"/>
<rule name="default"/>
</queuePlacementPolicy>
</allocations>
启动hive shell,设置hive的资源队列为tez
set mapred.job.queue.name=tez;
报错:不允许设置当hive正在运行时
解释:当前白名单允许修改的配置中不包括当前配置
解决:将该字段添加到白名单中,或直接修改hive配置
hiveserver2-site
中添加如下配置
hive.security.authorization.sqlstd.confwhitelist.append =
tez\..*\..*|mapreduce\..*\..*|mapreduce\..*\..*\..*|mapreduce\..*\..*\..*\..*|parquet\..*\..*\..*\..*|hive\..*|hive\..*\..*|hive\..*\..*\..*|hive\..*\..*\..*\..*
hive的问题解决,但启动的任务仍然放在default中,即使制定了hive任务的队列,猜测可能是因为queuePlacementPolicy
策略理解有误,待考察第二套方案,根据用户名称设置队列,任务谁提交放在哪个队列下
<?xml version="1.0"?>
<allocations>
<userMaxAppsDefault>30000</userMaxAppsDefault>
<queue name = "root">
<queue name="hdfs">
<weight>5</weight>
</queue>
<queue name="default">
<weight>5</weight>
<schedulingPolicy>fair</schedulingPolicy>
</queue>
</queue>
<queuePlacementPolicy>
<rule name="specified" create="false"></rule>
<rule name="primaryGroup" create="false"></rule>
<rule name="user" create="false"></rule>
<rule name="default"></rule>
</queuePlacementPolicy>
</allocations>
问题解决,经测试,使用yarn用户提交wordcount任务,走default资源队列,两个任务实现并行执行,问题解决