Apache Tez 任务在 Application Master 处暂停

Apache Tez tasks on hold at the Application Master

我有一个tez问题,当运行同时查询14个左右时,其中一些延迟超过5分钟,但集群利用率仅为14%。

这就是我要说的消息。

INFO SessionState: [HiveServer2-Background-Pool: Thread-322319]: Get Query Coordinator (AM)            308.84s

我的配置如下:

yarn.scheduler.maximum-allocation-mb=188000 
yarn.app.mapreduce.am.resource.mb = 16000 
tez.am.resource.memory.mb = 8000
hive.tez.container.size = 8192
tez.runtime.io.sort.mb 2048 
tez.am.launch.cmd-opts default - .8
tez.runtime.unordered.output.buffer.size-mb= 800 
hive.server2.tez.sessions.per.default.queue = 2 
tez.session.am.dag.submit.timeout.secs = 900  
tez.am.session.min.held.containers=8
tez.am.resource.memory.mb = 8000
hive.prewarm.enabled = TRUE

这是一个 15 节点集群,254GB 内存 p/node,32 个内核 p/node。

有什么线索吗? AM 尺寸合适吗?我没有出现内存不足的错误,只是当一切都是 运行 时这么长的等待时间,但是当它们全部在一起时它们只处理 3500 万条记录。

谢谢

有一个行为在文档中没有得到很好的解释,事实上,为了真正利用集群和所有额外的内存配置,您必须设置默认队列,并且您需要在您使用时指定它们要去查询,或者连接spark等

例如,使用tez时,需要使用tez.name.queue={your queue name}才能充分利用它,这样可以实现yarn的并行性。

对于 spark,您需要在启动 pyspark 时或在使用 spark_submit.

提交作业时指定 --queue {your queue name}

为了使用以上内容,您需要使用 hive.server2.tez.default.queues 在 yarn 中设置队列,您需要使用 tez 的默认队列列表设置参数。重要的是要注意,您可以创建队列而不将它们列为默认队列,这样做您需要始终手动调出队列并且查询不会进入任何默认队列。