如何基于Tez执行引擎在Hive中并行运行多查询并配置YARN容器限制
基于Tez执行引擎在Hive中实现多查询并行及容器资源限制
一、配置Hive支持多查询并行执行
要让多个用户的Hive查询基于Tez并行运行,需从Hive服务配置、Tez会话管理和YARN调度三个维度调整:
启用HiveServer2异步执行
打开HS2的异步执行开关,允许同时处理多个查询请求:<property> <name>hive.server2.enable.async.execution</name> <value>true</value> </property>控制HS2并行查询上限
通过线程池大小限制同时运行的查询数量,避免服务过载:<property> <name>hive.server2.async.execution.threadpool.size</name> <value>15</value> <!-- 根据集群资源调整,建议10-20 --> </property>开启Tez会话复用
避免每个查询都创建新的Tez会话,提升资源利用率和并行效率:<property> <name>hive.tez.session.reuse</name> <value>true</value> </property>配置YARN资源调度器
使用YARN的Capacity/Fair Scheduler确保多个查询公平分配资源:- 若用Capacity Scheduler,给Hive队列设置合理的资源占比和用户限制,示例:
<property> <name>yarn.scheduler.capacity.hive.maximum-capacity</name> <value>70</value> <!-- Hive队列最多占用集群70%资源 --> </property> <property> <name>yarn.scheduler.capacity.hive.user-limit-factor</name> <value>0.3</value> <!-- 单个用户最多用Hive队列30%的资源 --> </property>
- 若用Capacity Scheduler,给Hive队列设置合理的资源占比和用户限制,示例:
二、限制单个Hive查询的YARN容器数量
通过Tez和Hive的配置项,从容器规格、并行度两个层面限制单个查询的资源占用:
设置单个容器的资源规格
定义Tez容器的内存大小,结合YARN节点的总资源,间接控制单节点可运行的容器数:<property> <name>hive.tez.container.size</name> <value>4096</value> <!-- 单位MB,根据节点内存调整,比如4GB --> </property> <!-- 同时配置容器的CPU核数 --> <property> <name>tez.task.resource.cpu</name> <value>1</value> </property>限制查询的最大并行度
直接控制单个查询能启动的最大并行任务数(对应容器数):<property> <name>hive.tez.max.parallelism</name> <value>50</value> <!-- 单个查询最多启动50个并行容器 --> </property>控制Tez AM的并发任务数
限制单个Tez Application Master能同时调度的任务数:<property> <name>tez.task.max.concurrent</name> <value>20</value> </property>
注意事项
- 所有配置修改后,需重启HiveServer2和YARN服务才能生效。
- 需根据集群的实际CPU、内存资源调整参数,避免资源浪费或过载。
- 可通过YARN UI监控容器分配和资源使用情况,按需优化配置。
内容的提问来源于stack exchange,提问作者asukhwal9
相关产品推荐
相关产品推荐

