---
title: 调优Spark任务
description: "使用OmniAdvisor参数调优特性，推荐Spark任务的最佳运行参数，从而优化任务性能。"
url: https://www.hikunpeng.com/document/detail/zh/kunpengboostkithistory/2300/bds/kunpengbds_omniruntime_20_0195.html
sourcePath: /source/zh/kunpengboostkithistory/2300/bds/kunpengbds_omniruntime_20_0195.html
indexId: 544a2e330573439b4f2e5babb0bf84d7b147a0d53f8592dbe2229fccecc2daf878
---
# 调优Spark任务

使用OmniAdvisor参数调优特性，推荐Spark任务的最佳运行参数，从而优化任务性能。

1. 在管理节点，使用当前用户初始化数据库。

  a. 打开“/opt/OmniAdvisor/BoostKit-omniadvisor_1.0.0/config/common_config.cfg”文件配置项。
    1 vi /opt/OmniAdvisor/BoostKit-omniadvisor_1.0.0/config/common_config.cfg

  b. 按“i”进入编辑模式，在文件中修改以下内容。common_config.cfg配置文件参数说明请参见    common_config.cfg
。
    1 2 3 4 5 [database] # MySQL数据库相关的用户名，端口号等信息 db_name = test_spark db_host = localhost db_port = 3306

  c. 按“Esc”键，输入:wq!，按“Enter”保存并退出编辑。
  d. 执行初始化命令。
    1 python main.pyc spark init_environment

    执行成功后，会在test_spark数据库中创建yarn_app_result表、best_config表和sampling_config表。

2. 配置日志解析模块。
  修改“/opt/OmniAdvisor/boostkit-omniadvisor-log-analyzer-1.0.0-aarch64/conf/omniAdvisorLogAnalyzer.properties”
  配置文件。
  a. 打开文件。
    1 vi /opt/OmniAdvisor/boostkit-omniadvisor-log-analyzer-1.0.0-aarch64/conf/omniAdvisorLogAnalyzer.properties

  b. 按“i”进入编辑模式，增加或修改以下配置。omniAdvisorLogAnalyzer.properties配置文件参数说明请参见    omniAdvisorLogAnalyzer.properties
。
    1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 # 日志解析并发进程数 log.analyzer.thread.count=3 # 数据库的Driver，目前只支持MySQL datasource.db.driver=com.mysql.cj.jdbc.Driver # 数据库的URL datasource.db.url=jdbc:mysql://server1:3306/database # 是否开启Spark的日志解析 spark.enable=true # SQL执行所依赖的数据库名字 spark.workload=default # Spark日志解析模式，目前支持rest和log两种 spark.eventLogs.mode=rest # Spark日志分析超时时间，单位：s，超过这个时间则该任务分析失败 spark.timeout.seconds=30

  c. 按“Esc”键，输入:wq!，按“Enter”保存并退出编辑。


3. Spark日志采集提供两种模式，分别为log模式以及rest模式，二者选其一即可。rest模式通过调用Spark的history server restAPI的方式获取要解析的日志文件，log模式为直接分析Spark的任务日志文件。

  - rest模式配置。要启用rest模式需要开启Spark的history server服务，修改“/opt/OmniAdvisor/boostkit-omniadvisor-log-analyzer-1.0.0-aarch64/conf/omniAdvisorLogAnalyzer.properties”的配置文件。

    a. 打开文件。
      1 vi /opt/OmniAdvisor/boostkit-omniadvisor-log-analyzer-1.0.0-aarch64/conf/omniAdvisorLogAnalyzer.properties

    b. 按“i”进入编辑模式，增加或修改如下配置。omniAdvisorLogAnalyzer.properties配置文件参数说明请参见      omniAdvisorLogAnalyzer.properties
。
      1 2 3 spark.eventLogs.mode=rest # Spark History Server的URL spark.rest.url=http://server1:18080

    c. 按“Esc”键，输入:wq!，按“Enter”保存并退出编辑。
  - log模式配置。修改“/opt/OmniAdvisor/boostkit-omniadvisor-log-analyzer-1.0.0-aarch64/conf/omniAdvisorLogAnalyzer.properties”的配置文件。

    a. 打开文件。
      1 vi /opt/OmniAdvisor/boostkit-omniadvisor-log-analyzer-1.0.0-aarch64/conf/omniAdvisorLogAnalyzer.properties

    b. 按“i”进入编辑模式，增加或修改如下配置。omniAdvisorLogAnalyzer.properties配置文件参数说明请参见      omniAdvisorLogAnalyzer.properties
。
      1 2 3 4 5 6 7 8 9 spark.eventLogs.mode=log # Spark日志文件的存储目录 spark.log.directory=hdfs://server1:9000/spark2-history # Spark日志文件的最大大小，超过该目录大小，则会跳过该日志的解析，单位：MB spark.log.maxSize.mb=500 # 安全模式下用于kerberos认证的用户,非安全模式环境可省略 kerberos.principal=principle # 安全模式下用于kerberos认证的keytab文件路径，非安全模式环境可省略 kerberos.keytab.file=/usr/principle.keytab

    c. 按“Esc”键，输入:wq!，按“Enter”保存并退出编辑。
    d. 将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
```


4. 调用日志解析模块，将解析的数据写入数据库。

  a. 打开“/opt/OmniAdvisor/BoostKit-omniadvisor_1.0.0/config/common_config.cfg”配置文件。
    1 vi /opt/OmniAdvisor/BoostKit-omniadvisor_1.0.0/config/common_config.cfg

  b. 按“i”进入编辑模式，修改日志起止时间。common_config.cfg配置文件参数说明请参见    common_config.cfg
。
    1 2 3 4 5 6 7 [spark] # Spark日志的起始时间 log_start_time = 2023-09-05 19:54:51 # Spark日志的终止时间 log_end_time = 2023-09-05 19:57:17 # 是否对已经运行过的SQL进行全部采样（从数据库中获取application_name），如果为true，则history_application_name配置项会失效 enable_sampling_all_sql = true

  c. 按“Esc”键，输入:wq!，按“Enter”保存并退出编辑。
  d. 执行采集命令。
    1 python main.pyc spark fetch_history_data

    数据解析成功后，将数据结果写入了yarn_app_result表和best_config表中，sampling_config表中仍是空的。

5. 采样历史任务的参数，并进行调优。

  - 采样所有历史任务的参数，每个任务采样参数40次。

    a. 打开“/opt/OmniAdvisor/BoostKit-omniadvisor_1.0.0/config/common_config.cfg”配置文件。
      1 vi /opt/OmniAdvisor/BoostKit-omniadvisor_1.0.0/config/common_config.cfg

    b. 按“i”进入编辑模式，修改参数如下。common_config.cfg配置文件参数说明请参见      common_config.cfg
。
      1 2 3 4 5 [sampling] # 参数采样的轮数 sampling_epochs = 40 [spark] enable_sampling_all_sql = true

    c. 按“Esc”键，输入:wq!，按“Enter”保存并退出编辑。
    d. 打开“/opt/OmniAdvisor/BoostKit-omniadvisor_1.0.0/config/spark/spark_config.yml”配置文件，根据yaml配置文件中的注释指导、用户需求，修改参数取值范围或者新增调优参数。
    e. 执行采集命令。
      1 python main.pyc spark parameter_sampling

      执行成功后可以在数据库中的sampling_config表查看到采样的数据。

  - 采样指定历史任务参数40次。

    a. 打开“/opt/OmniAdvisor/BoostKit-omniadvisor_1.0.0/config/common_config.cfg”配置文件。
      1 vi /opt/OmniAdvisor/BoostKit-omniadvisor_1.0.0/config/common_config.cfg

    b. 按“i”进入编辑模式，修改参数如下。common_config.cfg配置文件参数说明请参见      common_config.cfg
。
      1 2 3 4 5 6 7 [sampling] # 参数采样的轮数 sampling_epochs = 40 [spark] enable_sampling_all_sql = false history_application_name=q12

    c. 按“Esc”键，输入:wq!，按“Enter”保存并退出编辑。
    d. 执行采集命令。
      1 python main.pyc spark parameter_sampling

      执行成功后可以在数据库中的sampling_config表查看到采样的数据，采样调优完成之后，才能对该任务进行参数推荐。

6. 修改执行脚本。

  a. 复制原生的spark-sql脚本，重命名为spark-sql-recommend脚本。

```
rm -rf
$SPARK_HOME
/bin/spark-sql-recommend
cp
$SPARK_HOME
/bin/spark-sql
$SPARK_HOME
/bin/spark-sql-recommend
```


  b. 打开spark-sql-recommend脚本。
    1 vi spark-sql-recommend

  c. 按“i”进入编辑模式，修改脚本中的第25行。
    1 exec "${SPARK_HOME}"/bin/spark-submit --class org.apache.spark.sql.hive.thriftserver.SparkSQLCLIDriver "$@"

    修改为如下内容。 1 python /opt/OmniAdvisor/BoostKit-omniadvisor_1.0.0/main.pyc spark parameter_recommend "$@"

  d. 按“Esc”键，输入:wq!，按“Enter”保存并退出编辑。
7. 推荐采样中运行最优的参数来执行任务。

  - 根据任务名称application_name推荐参数。

    a. 打开“/opt/OmniAdvisor/BoostKit-omniadvisor_1.0.0/config/common_config.cfg”配置文件。
      1 vi /opt/OmniAdvisor/BoostKit-omniadvisor_1.0.0/config/common_config.cfg

    b. 按“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

    c. 按“Esc”键，输入:wq!，按“Enter”保存并退出编辑。
    d. 执行命令。以q12为例， 通过任务名来推荐数据库中的最佳参数。

```
$SPARK_HOME
/bin/spark-sql-recommend --deploy-mode client --driver-cores 5 --driver-memory 5g --num-executors 18 --conf spark.memory.offHeap.size=2G --database tpcds_bin_partitioned_decimal_orc_3000 --name q12 -f /home/test_spark/q12.sql
```


  - 根据Hash值query_hash推荐参数。

    a. 打开“/opt/OmniAdvisor/BoostKit-omniadvisor_1.0.0/config/common_config.cfg”配置文件。
      1 vi /opt/OmniAdvisor/BoostKit-omniadvisor_1.0.0/config/common_config.cfg

    b. 按“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

    c. 按“Esc”键，输入:wq!，按“Enter”保存并退出编辑。
    d. 执行命令。以q12为例，通过这条query对应的Hash值来推荐数据库中的最佳参数。
      1 $SPARK_HOME/bin/spark-sql-recommend --deploy-mode client --driver-cores 5 --driver-memory 5g --num-executors 18 --conf spark.memory.offHeap.size=2G --database tpcds_bin_partitioned_decimal_orc_3000 --name q12_bak -f /home/test_spark/q12.sql
