0

我有一个 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/节点,32 核 p/节点。

任何线索可能会发生什么?AM尺寸合适吗?我没有内存不足的错误,只是在一切运行时等待时间很长,但是当它们一起处理时,它们只处理 3500 万条记录。

谢谢

4

1 回答 1

0

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

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

对于 spark,您需要--queue {your queue name}在启动 pyspark 或使用 spark_submit 提交作业时指定。

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

于 2022-01-27T14:44:16.723 回答