调优Hive任务
使用OmniAdvisor参数调优特性计算出Hive任务的最佳运行参数,从而优化任务性能。
- 修改“$HIVE_HOME/conf/hive-site.xml”配置文件确保hive.execution.engine指定的是Tez。
- 打开配置文件。
vi $HIVE_HOME/conf/hive-site.xml
- 按“i”进入编辑模式,确保hive.execution.engine指定的是Tez。
1 2 3 4 5 6 7 8 9 10 11 12
<property> <name>hive.execution.engine</name> <value>tez</value> </property> <property> <name>hive.cli.tez.session.async</name> <value>false</value> <description> Whether to start Tez session in background when running CLI with Tez, allowing CLI to be available earlier. </description> </property>
- 按“Esc”键,输入:wq!,按“Enter”保存并退出编辑。
- 打开配置文件。
- 初始化数据库。
- 打开“/opt/OmniAdvisor/BoostKit-omniadvisor_1.0.0/config/common_config.cfg”配置文件。
1
vi /opt/OmniAdvisor/BoostKit-omniadvisor_1.0.0/config/common_config.cfg
- 按“i”进入编辑模式,修改内容如下。common_config.cfg配置文件参数说明可参见common_config.cfg。
1 2 3 4 5
[database] # MySQL数据库相关的用户名,端口号等信息 db_name = test_hive db_host = localhost db_port = 3306
- 按“Esc”键,输入:wq!,按“Enter”保存并退出编辑。
- 执行初始化命令。
1
python main.pyc hive init_environment
执行成功后,会在test_hive数据库中创建yarn_app_result、best_config和sampling_config表。
- 打开“/opt/OmniAdvisor/BoostKit-omniadvisor_1.0.0/config/common_config.cfg”配置文件。
- 配置日志解析模块。
- 解析Hive的Tez任务日志需要开启Yarn的timelineServer服务,打开“/opt/OmniAdvisor/boostkit-omniadvisor-log-analyzer-1.0.0-aarch64/conf/omniAdvisorLogAnalyzer.properties”配置文件。
1
vi /opt/OmniAdvisor/boostkit-omniadvisor-log-analyzer-1.0.0-aarch64/conf/omniAdvisorLogAnalyzer.properties
- 按“i”进入编辑模式,增加或修改以下配置。omniAdvisorLogAnalyzer.properties配置文件参数说明可参见omniAdvisorLogAnalyzer.properties。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
# 日志解析并发进程数 log.analyzer.thread.count=3 # 数据库的Driver,目前只支持MySQL datasource.db.driver=com.mysql.cj.jdbc.Driver # 数据库的URL datasource.db.url=jdbc:mysql://server1:3306/database # 是否开启Tez的日志解析 tez.enable=true # Hive Tez的工作DataBase tez.workload=default # timeline服务的URL tez.timeline.url=http://server1:8188 # timeline服务连接超时时间,单位:ms tez.timeline.timeout.ms=6000 # 安全模式下用于kerberos认证的用户,非安全模式环境可省略 kerberos.principal=principle # 安全模式下用于kerberos认证的keytab文件路径,非安全模式环境可省略 kerberos.keytab.file=/usr/principle.keytab
- 按“Esc”键,输入:wq!,按“Enter”保存并退出编辑。
- 将Hadoop的配置文件hdfs-site.xml以及core-site.xml复制到“/opt/OmniAdvisor/boostkit-omniadvisor-log-analyzer-1.0.0-aarch64/conf”目录下
cp ${HADOOP_HOME}/etc/hadoop/hdfs-site.xml /opt/OmniAdvisor/boostkit-omniadvisor-log-analyzer-1.0.0-aarch64/conf cp ${HADOOP_HOME}/etc/hadoop/core-site.xml /opt/OmniAdvisor/boostkit-omniadvisor-log-analyzer-1.0.0-aarch64/conf
- 解析Hive的Tez任务日志需要开启Yarn的timelineServer服务,打开“/opt/OmniAdvisor/boostkit-omniadvisor-log-analyzer-1.0.0-aarch64/conf/omniAdvisorLogAnalyzer.properties”配置文件。
- 调用日志解析模块,将解析的数据写入数据库。
- 打开“/opt/OmniAdvisor/BoostKit-omniadvisor_1.0.0/config/common_config.cfg”配置文件。
1
vi /opt/OmniAdvisor/BoostKit-omniadvisor_1.0.0/config/common_config.cfg
- 按“i”进入编辑模式,修改日志起止时间。common_config.cfg配置文件参数说明可参见common_config.cfg。
1 2 3 4 5 6 7
[hive] # Tez运行日志的起始时间,可以从Hadoop UI上查看日期 log_start_time = 2023-09-14 19:12:45 # Tez运行日志的终止时间 log_end_time = 2023-09-14 19:19:45 # 是否对已经运行过的SQL进行全部采样(从数据库中获取application_name),如果为true,则history_application_name配置项会失效 enable_sampling_all_sql = true
- 按“Esc”键,输入:wq!,按“Enter”保存并退出编辑。
- 执行采集命令。
1
python main.pyc hive fetch_history_data
数据解析成功后,将数据结果写入了yarn_app_result表和best_config表中,sampling_config表中仍是空的。
- 打开“/opt/OmniAdvisor/BoostKit-omniadvisor_1.0.0/config/common_config.cfg”配置文件。
- 采样历史任务的参数,并进行调优。
- 采样所有历史任务的参数,每个任务采样参数40次。
- 打开“/opt/OmniAdvisor/BoostKit-omniadvisor_1.0.0/config/common_config.cfg”配置文件。
1
vi /opt/OmniAdvisor/BoostKit-omniadvisor_1.0.0/config/common_config.cfg
- 按“i”进入编辑模式,修改参数如下。common_config.cfg配置文件参数说明可参见common_config.cfg。
1 2 3 4 5
[sampling] # 参数采样的轮数 sampling_epochs = 40 [hive] enable_sampling_all_sql = true
- 按“Esc”键,输入:wq!,按“Enter”保存并退出编辑。
- 打开“/opt/OmniAdvisor/BoostKit-omniadvisor_1.0.0/config/hive/hive_config.yml”配置文件,按照yaml中的指导,可以按照用户需求修改参数取值范围或者新增调优参数。
- 执行采集命令。
1
python main.pyc hive parameter_sampling
执行成功后可以在数据库中的sampling_config表查看到采样的数据。
- 打开“/opt/OmniAdvisor/BoostKit-omniadvisor_1.0.0/config/common_config.cfg”配置文件。
- 采样指定历史任务参数40次。
- 打开“/opt/OmniAdvisor/BoostKit-omniadvisor_1.0.0/config/common_config.cfg”配置文件。
1
vi /opt/OmniAdvisor/BoostKit-omniadvisor_1.0.0/config/common_config.cfg
- 按“i”进入编辑模式,修改参数如下。common_config.cfg配置文件参数说明可参见common_config.cfg。
1 2 3 4 5 6
[sampling] # 参数采样的轮数 sampling_epochs = 40 [hive] enable_sampling_all_sql = false history_application_name=q12
- 按“Esc”键,输入:wq!,按“Enter”保存并退出编辑。
- 执行采集命令。
1
python main.pyc hive parameter_sampling
执行成功后可以在数据库中的sampling_config表查看到采样的数据。
- 打开“/opt/OmniAdvisor/BoostKit-omniadvisor_1.0.0/config/common_config.cfg”配置文件。
- 采样所有历史任务的参数,每个任务采样参数40次。
- 修改执行脚本。
- 复制原生的Hive脚本,重命名为hive-recommend脚本。
rm -rf $HIVE_HOME/bin/hive-recommend cp $HIVE_HOME/bin/hive $HIVE_HOME/bin/hive-recommend
- 打开hive-recommend脚本。
1
vi hive-recommend
- 输入“/$TORUN”并按“Enter”开始搜索。
- 按“i”进入编辑模式,将搜索到的“$TORUN”该行内容进行修改。
1
$TORUN "$@"
修改为如下内容。1
python /opt/OmniAdvisor/BoostKit-omniadvisor_1.0.0/main.pyc hive parameter_recommend "$@"
- 按“Esc”键,输入:wq!,按“Enter”保存并退出编辑。
- 复制原生的Hive脚本,重命名为hive-recommend脚本。
- 推荐采样中运行最优的参数来执行任务。
- 根据任务名称application_name推荐参数。
- 打开“/opt/OmniAdvisor/BoostKit-omniadvisor_1.0.0/config/common_config.cfg”配置文件。
1
vi /opt/OmniAdvisor/BoostKit-omniadvisor_1.0.0/config/common_config.cfg
- 按“i”进入编辑模式,修改参数如下。common_config.cfg配置文件参数说明可参见common_config.cfg。
1 2 3 4
[recommend] # 任务采样调优完成后,需要重新运行某个历史任务,可以通过任务的名称(application_name)或者query的Hash值(query_hash)来指定查找数据库中该任务的最佳参数 # options: [application_name, query_hash] recommend_identifier = application_name
- 按“Esc”键,输入:wq!,按“Enter”保存并退出编辑。
- 执行命令。以q12为例, 通过任务名来推荐数据库中的最佳参数。
$HIVE_HOME/bin/hive-recommend --hiveconf hive.tez.container.size=1024 --hiveconf tez.am.resource.memory.mb=1024 --hiveconf hive.session.id=q12 --database tpcds_bin_partitioned_decimal_orc_3000 -f /home/test_hive/q12.sql
- 打开“/opt/OmniAdvisor/BoostKit-omniadvisor_1.0.0/config/common_config.cfg”配置文件。
- 根据Hash值query_hash推荐参数。以q12为例,通过这条query对应的Hash值来推荐数据库中的最佳参数。
- 打开“/opt/OmniAdvisor/BoostKit-omniadvisor_1.0.0/config/common_config.cfg”文件配置。
1
vi /opt/OmniAdvisor/BoostKit-omniadvisor_1.0.0/config/common_config.cfg
- 按“i”进入编辑模式,修改参数如下。common_config.cfg配置文件参数说明可参见common_config.cfg。
1 2 3 4
[recommend] # 任务采样调优完成后,需要重新运行某个历史任务,可以通过任务的名称(application_name)或者query的Hash值(query_hash)来指定查找数据库中该任务的最佳参数 # options: [application_name, query_hash] recommend_identifier = query_hash
- 按“Esc”键,输入:wq!,按“Enter”保存并退出编辑。
- 执行命令。
$HIVE_HOME/bin/hive-recommend --hiveconf hive.tez.container.size=1024 --hiveconf tez.am.resource.memory.mb=1024 --hiveconf hive.session.id=q12_bak --database tpcds_bin_partitioned_decimal_orc_3000 -f /home/test_hive/q12.sql
- 打开“/opt/OmniAdvisor/BoostKit-omniadvisor_1.0.0/config/common_config.cfg”文件配置。
- 根据任务名称application_name推荐参数。
父主题: 使用OmniAdvisor参数调优特性