开启 Hive 优化插件

最近更新时间:2026-02-02 15:53:11

我的收藏

简介

Hive 优化主要适用于周期性执行的 Hive On MR 任务,根据其历史运行特征,动态优化资源使用量。

Step1:检查 Hive 调优插件是否已经部署

1. 登录提交机器。
2. 查看插件是否存在。
ls /usr/local/service/hive/lib/*hive-conf-tuner*

Step2:修改 Hive 配置

在控制台对下述配置进行修改:
针对 hive-envs.sh 配置:
新增配置项:
# 新增配置项
HADOOP_CLIENT_OPTS = "${HADOOP_CLIENT_OPTS:+$HADOOP_CLIENT_OPTS }-javaagent:/usr/local/service/hive/lib/1.0.0_hive-conf-tuner.jar"
针对 hive-site.xml 配置:
修改配置项:追加 com.tencentcloud.emr.hive.tuner.hook.HiveExecutionHook 到如下配置,使用逗号作为分隔符与原始的其他类分隔。
hive.exec.pre.hooks
hive.exec.post.hooks
hive.exec.failure.hooks
新增配置项:
emr.tuning.agent.enable = true
emr.tuning.agent.script.conf.key = ^hive\\.

Step3:联系后台开启客户前端白名单(内部开白)

可通过 提交工单 提供集群 ID 申请开启 Hive 优化策略白名单。

Step4:配置任务指纹策略

Hive 调优插件依赖于任务指纹识别同一个周期任务,针对任务指纹的生成有两种方式:
1. 自定义任务指纹需要以单条 SQL 的形式设置任务指纹,在执行 SQL 前,配置该 SQL 任务的指纹信息:
若一次提交任务仅包含单条 SQL,可在提交的时候设置指纹参数:
--hiveconf emr.tuning.agent.fp_id={Task_fp_id}
--hiveconf emr.tuning.agent.fp_name={Task_fp_name}
若一次提交任务包含多条 SQL,需要在每个 SQL 前设置指纹参数:
SET emr.tuning.agent.fp_id={Task_fp_id}
SET emr.tuning.agent.fp_name={Task_fp_name}
2. 联系后台添加任务指纹计算脚本,根据任务特征自动为每条 SQL 生成任务指纹,则无需添加任务指纹相关配置。
添加成功后,在控制台 > 配置中心 > 调优自治策略 > 调优调参可以看见任务指纹添加成功。


Step5:执行 Hive On MR 任务

自定义任务指纹模式-提交示例:
hive \\
--hiveconf hive.execution.engine=mr \\
--hiveconf mapreduce.map.memory.mb=1024 \\
--hiveconf mapreduce.reduce.memory.mb=1024 \\
-f test-1.sql
# test-1.sql
SET emr.tuning.agent.fp_id=SQL-1 // 自定义任务指纹
SET emr.tuning.agent.fp_name=SQL-1-Name // 自定义任务指纹名称
select count(1) from test_table;
SET emr.tuning.agent.fp_id=SQL-2 // 自定义任务指纹
SET emr.tuning.agent.fp_name=SQL-2-Name // 自定义任务指纹名称
select count(2) from test_table;
任务指纹脚本计算模式-提交示例:
hive \\
--hiveconf hive.execution.engine=mr \\
--hiveconf mapreduce.map.memory.mb=1024 \\
--hiveconf mapreduce.reduce.memory.mb=1024 \\
-f test-2.sql

Step6:验证 Hive 调优插件生效

检查路径:控制台 > 治理中心 > 调优任务记录 中查看该任务记录是否存在,存在则代表调优插件生效。
说明:
1. 调优插件实现任务调优需要参考历史运行记录,在 控制台 -> 配置中心 -> 调优规则 中,可以查看或者配置相应队列的参考周期,对于首次配置的调优任务,运行次数需要大于配置的参考周期才会开始调优。
2. 目前调优插件默认支持MR任务运行时间大于10分钟的调优任务,如需修改,则在 Yarn RM Active 节点,使用 root 权限执行以下脚本:
min_app_duration_seconds 设置为相应的运行时间。


通过 Yarn RM Active 节点设置 MR 任务需要调优的运行时间预置脚本如下:
mkdir -p /etc/emr
cat >> /etc/emr/ems-agent.ini << 'EOF'
[tasks_exporter]
min_app_duration_second=1
EOF

systemctl restart woodpecker-ems-agent