---
title: 使用OmniAdvisor参数调优
description: "安装部署OmniAdvisor参数调优到管理节点指定目录下面，比如：/opt/OmniAdvisor，这个路径定义为：$OMNIADVISOR_HOME。OmniAdvisor参数调优的使用有OmniAdvisor参数调优CLI和非交互式命令执行两种运行方式，建议使用OmniAdvisor参数调优CLI。"
url: https://www.hikunpeng.com/document/detail/zh/kunpengboostkithistory/2400/bds/kunpengbds_omniruntime_20_0516.html
sourcePath: /source/zh/kunpengboostkithistory/2400/bds/kunpengbds_omniruntime_20_0516.html
indexId: 3f1dc2a2a8c7d4bd7266552cb8716dfa3eb8145a984740f657a0ff1510a2c1b478
---
# 使用OmniAdvisor参数调优

安装部署OmniAdvisor参数调优到管理节点指定目录下面，比如：/opt/OmniAdvisor，这个路径定义为：$OMNIADVISOR_HOME。OmniAdvisor参数调优的使用有OmniAdvisor参数调优CLI和非交互式命令执行两种运行方式，建议使用OmniAdvisor参数调优CLI。

#### 通过OmniAdvisor参数调优CLI使用OmniAdvisor参数调优

OmniAdvisor参数调优使用主要包括以下步骤，按需求完成common_config.cfg文件的配置、调用OmniAdvisor参数调优入口、初始化环境配置、解析历史任务信息、使用AI算法进行参数采样和参数推荐。

1. 修改common_config.cfg配置文件。

  a. 在管理节点打开common_config.cfg文件。
    1 vi $OMNIADVISOR_HOME/BoostKit-omniadvisor_1.1.0/config/common_config.cfg

  b. 参考如下配置按实际情况填写。
    1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 [workload] # 测试执行的数据库名称 workload_name = tpcds_bin_partitioned_decimal_orc_2 # 日志解析模块解压存放的路径，该路径下需要有解析日志的JAR包 log_analyzer_path = /opt/OmniAdvisor/boostkit-omniadvisor-log-analyzer-1.1.0-aarch64 # 需要指定任务运行的唯一标识，可以通过匹配任务的名称（application_name）的hash值或者匹配任务的hash值（对应Query的Hash或者对应JAR包的Hash）来匹配查找数据库中该任务的最佳参数 # options: [application_name, job_hash] identification_type = job_hash # 参数采样轮数的阈值 sampling_epochs = 20 # 采样任务超时后是否处理策略，kill或者warn # options: [kill, warn] timeout_strategy = kill # 参数推荐后的提升比率阈值，当 历史最优-当前最优/当前最优 高于boosting_ratio后 刷新最优参数 boosting_ratio = 0.03 # 子进程超时等待时间 单位:秒 proc_timeout_seconds = 3600 [database] # MySQL数据库相关的用户名，端口号等信息 # db_name表示MySQL的数据库名字，如果不存在会自动创建 # db_host表示连接MySQL的主机名，一般是localhost或者ip，db_port表示连接MySQL的端口号，默认是3306 db_name = test db_host = localhost db_port = 3306 [spark] # Spark运行日志的起始时间，可以从Spark History Server（默认在18080端口）上查看日期 log_start_time = 2024-07-24 00:00:00 # Spark运行日志的终止时间 log_end_time = 2024-07-24 23:59:59 # Spark默认参数，一般默认参数不参与参数采样过程 spark_default_config = --conf spark.sql.orc.impl=native --conf spark.serializer=org.apache.spark.serializer.KryoSerializer --conf spark.locality.wait=0 --conf spark.sql.broadcastTimeout=300 [hive] # Tez运行日志的起始时间，可以从Hadoop UI（默认在8088端口）上查看日期 log_start_time = 2024-01-18 12:07:39 # Tez运行日志的终止时间 log_end_time = 2024-01-18 12:11:54 # Hive默认参数，一般默认参数不参与参数采样过程 hive_default_config = --hiveconf hive.cbo.enable=true --hiveconf tez.am.container.reuse.enabled=true --hiveconf hive.merge.tezfiles=true [loganalyzer] # 日志解析并发进程数，即同时分析的任务数。 log.analyzer.thread.count = 3 [kerberos] # 安全模式下，用于Kerberos认证的用户。 # kerberos.principal = primary/instance@REALM # 安全模式下，用于Kerberos认证的keytab文件路径。 # kerberos.keytab.file = /directory/kerbors.keytab [datasource] # 日志分析后，用于保存分析结果的数据库的Driver。 datasource.db.driver = com.mysql.cj.jdbc.Driver [sparkfetcher] # Spark Fetcher的模式，目前支持log以及rest两种模式。 spark.eventlogs.mode = rest # Spark History Server的URL，仅用于rest模式。 spark.rest.url = http://server1:18080 # Spark Fetcher分析任务超时时间，单位：s。 spark.timeout.seconds = 30 # Spark日志存放目录，仅用于log模式。 # spark.log.directory = hdfs://server1:9000/spark2-history # Spark分析日志文件的最大大小，单位：MB，超出该大小的日志文件将会被忽略，仅用于log模式。 # spark.log.maxsize.mb = 500 [tezfetcher] # Timeline server的URL。 tez.timeline.url = http://server1:8188 # Timeline server访问超时时间，单位：ms。 tez.timeline.timeout.ms = 6000

  c. 按“Esc”键，输入:wq!，按“Enter”保存并退出编辑。
2. 调用OmniAdvisor入参数调优口。

  a. 在管理节点中调用OmniAdvisor参数调优入口，开始通过OmniAdvisor参数调优CLI使用参数调优特性：

```
python
$OMNIADVISOR_HOME
/BoostKit-omniadvisor_1.1.0/main.pyc
```


  b. 根据提示输入MySQL的用户密码，按“Enter”继续。
  c. 选择调优引擎。
    输入spark或者hive选定调优引擎，或按“Tab”选择引擎。

  d. 选定引擎后，可根据提示选择执行指令：
  e. 输入对应命令即可执行对应操作。
**表1 命令及对应操作**

| 命令 | 操作 |
| --- | --- |
| init\_environment | 初始化环境配置，包括数据库连接、数据库创建、数据表初始化等。 |
| fetch\_history\_data | 从Spark的HistoryServer或者Hive组件的Timeline Server上解析历史任务信息。 |
| parameter\_sampling | 采用AI算法对所有历史任务进行参数采样。 |
| parameter\_recommend | 进行参数推荐。 |


3. init_environment初始化环境配置。
  输入init_environment或者按“Tab”选择“init_environment”后按“Enter”即可初始化环境。

4. fetch_history_data解析历史任务信息。
  输入fetch_history_data或者按“Tab”选择“fetch_history_data”后回车即可调用日志解析模块进行历史任务信息解析。

5. parameter_sampling使用AI算法进行参数采样。

  a. 输入parameter_sampling或者按“Tab”选择“parameter_sampling”后，按提示输入采样轮数。
  b. 选择是否采样调优数据库中所有任务，默认会对数据库中所有任务进行采样调优；选择no则需要选择指定任务进行调优。
  c. 当选择no，则CLI会列出所有可调优的任务，复制需要采样调优的任务的identification，用 "," 分割，回车即可执行指定任务的参数采样。
6. parameter_recommend参数推荐。
  输入parameter_recommend或者按“Tab”选择“parameter_recommend”后，按提示输入SQL或APP提交命令即可进行参数推荐，并用推荐参数提交到对应引擎执行。


#### 通过非交互式命令使用OmniAdvisor参数调优

在管理节点通过指定参数快速开始执行对应步骤，请参见表2。


**表2 OmniAdvisor参数调优指定选项及参数**

| 选项 | 描述 | 用法示例 |
| --- | --- | --- |
| \-e, \-\-engine | 指定调优的大数据引擎，仅支持Spark或者Hive。 | python main.pyc \-e spark |
| \-i, \-\-instruction | 指定操作，可选择init\_environment、fetch\_history\_data、parameter\_sampling、parameter\_recommend。 | python main.pyc \-e spark \-i init\_environment |
| \-s, \-\-sampling\_id | 指定采样标识符，通过“,”分割。 | python main.pyc \-e spark \-i parameter\_sampling \-s "xx1" |
| \-n, \-\-sampling\_count | 指定参数采样轮数。 | python main.pyc \-e spark \-i parameter\_sampling \-n 10 |
| \-c, \-\-cmd | 指定参数推荐任务的Spark或Hive提交命令。 | python main.pyc \-e spark \-i parameter\_recommend \-c "spark\-sql xxx" |
| \-v, \-\-version | 查看OmniAdvisor参数调优版本。 | python main.pyc \-v |
| \-\-help | 查看帮助。 | python main.pyc \-\-help |


1. 初始化环境。

```
python
$
OMNIADVISOR_HOME
/BoostKit-omniadvisor_1.1.0/main.pyc -e spark -i init_environment
```


2. 解析历史任务信息。

```
python
$OMNIADVISOR_HOME
/BoostKit-omniadvisor_1.1.0/main.pyc -e spark -i fetch_history_data
```


3. 参数采样。
  对identification为"xx1"和"xx2"的任务进行3轮参数采样。

```
python
$OMNIADVISOR_HOME
/BoostKit-omniadvisor_1.1.0/main.pyc -e spark -i parameter_sampling -s "xx1,xx2" -n 3
```


4. 参数推荐。

```
python
$OMNIADVISOR_HOME
/BoostKit-omniadvisor_1.1.0/main.pyc -e spark -i parameter_recommend -c "spark-sql xxx"
```
