Hue如何并发运行多查询?Hive/Tez/Yarn并发配置调整
问题现象
在Hue平台提交第二个查询时,第一个处于运行状态的查询会被自动终止,需确认Hue、Hive、Tez、Yarn侧可控制查询最大并发数的相关配置项。
触发报错
org.apache.hive.service.cli.HiveSQLException: Error while processing statement: FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.tez.TezTask. Dag received [DAG_TERMINATE, DAG_KILL] in RUNNING state. Received message to shutdown AM from cnby (auth:SIMPLE) at Vertex killed, vertexName=Reducer 2, vertexId=vertex_1653638109600_4285_2_02, diagnostics=[Vertex received Kill while in RUNNING state.
问题根因
该现象不是Yarn资源抢占导致的被动任务失败,是各组件默认并发限制规则触发的主动任务终止,从报错中Received message to shutdown AM from cnby可以确认是同用户提交的新请求主动触发了旧任务的kill流程,和并发控制配置直接相关。
各组件并发控制相关配置项
Hue侧
max_concurrent_queries:单用户全局最大并发查询数,默认值多为1,即同一用户同一时间仅允许1个查询处于运行状态,新查询提交后会自动终止同用户下旧的运行中查询,按需调大该值即可支持多查询并行。close_old_queries:布尔型配置,默认值为true,开启后同会话提交新查询时会自动关闭旧的运行中查询,需要支持查询并行时需将该值设为false。
Hive侧
hive.server2.wm.worker.pool.size:HiveServer2后台工作线程池大小,控制服务端同时可处理的查询请求总量,默认值偏小时排队等待的请求会被主动终止。hive.server2.concurrent.connections.max:单用户最大允许的并发连接数,超过阈值时旧连接上的运行中任务会被触发kill逻辑。hive.tez.session.reuse.enabled:Tez会话复用开关,开启时多个查询会复用同一个Tez AM,若Tez侧单AM并发DAG数配置为1,就会出现新查询提交杀死旧查询的问题。
Tez侧
tez.am.max.concurrent.dags:单个Tez AM最大允许并行运行的DAG数量,默认值为1时同一个Tez AM同一时间仅能运行1个DAG,新DAG提交后会直接终止正在运行的旧DAG,和报错中Dag received [DAG_TERMINATE, DAG_KILL] in RUNNING state的特征完全匹配。tez.am.terminate.on.session.error:布尔型配置,默认值为true,会话连接出现超时、新请求抢占等异常时会直接终止当前AM上运行的所有DAG。tez.session.am.client.timeout-ms:Tez AM和客户端连接的超时时间,并发场景下排队请求等待时间过长触发超时后,AM会主动关闭旧连接并终止关联任务。
Yarn侧
yarn.scheduler.capacity.maximum-am-resource-percent:集群总资源中可分配给ApplicationMaster的资源占比,默认值通常为0.1(即10%集群资源),并发查询数过多导致AM资源占比超阈值时,调度器会触发旧任务回收。yarn.scheduler.capacity.<对应队列名>.max-parallel-apps:指定计算队列最大允许并行运行的应用数量,超过阈值时调度器会根据配置策略终止队列中已运行的旧应用。
配置调整优先级:优先排查Hue的
max_concurrent_queries、close_old_queries和Tez的tez.am.max.concurrent.dags配置,90%以上的同类问题都是这三个配置默认值限制导致的。
内容的提问来源于stack exchange,提问作者cnby
相关产品推荐
相关产品推荐

