我有一个 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 RAM p/节点,32 核 p/节点。
知道可能发生什么吗? AM 的尺寸合适吗?我没有出现内存不足错误,只是在一切都运行时等待时间很长,但当它们全部在一起时,它们只处理 3500 万条记录。
谢谢
文档中没有很好地解释一种行为,即为了真正利用集群和所有附加内存配置,您必须设置默认队列,并且需要在查询时指定它们,或连接火花等
例如,当使用tez时,您需要使用
tez.name.queue={your queue name}
才能充分利用它,这可以实现yarn中的并行性。
对于spark,您需要在启动pyspark时或使用spark_submit提交作业时指定
--queue {your queue name}
。
为了使用上述功能,您需要使用
hive.server2.tez.default.queues
在纱线中设置队列,您需要使用 tez 的默认队列列表来设置该参数。需要注意的是,您可以创建队列而不将它们列为默认队列,这样您就需要始终手动调出队列,并且查询不会进入任何默认队列。