---
title: 使用Spark任务后台调优功能
description: "Spark任务后台调优功能通过python tuning.pyc命令来实现，执行调优命令后，服务器后台将会对Spark任务进行调优。"
url: https://www.hikunpeng.com/document/detail/zh/kunpengboostkithistory/252RC1/bds/kunpengbds_omniruntime_20_0519.html
sourcePath: /source/zh/kunpengboostkithistory/252RC1/bds/kunpengbds_omniruntime_20_0519.html
indexId: 42c8c0eefd38ec82211b7bc04a61158a460a8d9c92fb3a082d5a1bddd5ac355880
---
# 使用Spark任务后台调优功能

Spark任务后台调优功能通过python tuning.pyc命令来实现，执行调优命令后，服务器后台将会对Spark任务进行调优。

#### 命令功能

在管理节点中，可以通过该命令来启动调优作业，通过指定选项来选择调优的目标、复测方式和调优方法。


#### 命令格式

```
python
tuning.pyc
[-h]
-
l
LOAD_ID
-r
{hijacking,backend} [
-t
{iterative,expert,transfer,native}]
```


#### 参数说明

| 名称 | 说明 |
| --- | --- |
| \-h或\-\-help | 可选。 查看命令帮助，帮助中将提供命令的使用方法、参数含义以及参数说明。 |
| \-l或\-\-load\-id | 必选。 表示loads表查询到的负载的ID。 |
| \-r或\-\-retest\-way | 必选。 表示复测方式。复测是为了保证结果的可靠性，可选前台或者后台复测。 hijacking：前台复测，当用户提交任务时，配置跟随任务下发。 backend：后台复测，由OmniAdvisor自动触发。 |
| \-t或\-\-tuning\-method | “\-r”或“\-\-retest\-way”为“hijacking”时，是必选参数；“\-r”或“\-\-retest\-way”是“backend”的情况下是可选参数。 表示调优方法。 iterative：AI迭代调优，使用AI算法搜索参数空间，寻找最优应用参数。 expert：专家规则调优，通过诊断并匹配负载性能瓶颈，优化应用参数。 transfer：迁移泛化调优，通过寻找历史相似负载，迁移其调优经验，获得性能较优的应用参数。 native：算子加速调优，将Spark原生算子替换为C++ Native算子，实现性能加速。 须知： 如果需要使用native调优方法，需要预先在集群中的每个节点上部署好OmniOperator组件，且目前不支持HDFS形式的部署。 |


#### 使用示例

- 查看命令的使用方法、参数含义以及参数说明。

```
python tuning.pyc --help
```


- 对“load-id”为“1”的负载进行一次专家规则调优，并使用后台复测的方式检验专家规则调优生成的配置的优化效果。

```
python tuning.pyc -l 1 -r backend -t expert
```


- 当不使用“-t”或“--tuning-method”选项指定调优方法且复测方式为后台复测时，默认使用OmniAdvisor参数调优2.0的基础配置文件common_config.ini中的tuning.strategy配置项进行调优。

```
python tuning.pyc -l 1 -r backend
```


#### 调优示例

1. 构造测试数据。

```
spark-sql --master yarn --deploy-mode client --driver-cores 8 --driver-memory 20G --num-executors 36 --executor-cores 8 --executor-memory 29g -e "CREATE DATABASE IF NOT EXISTS omnitest; CREATE TABLE IF NOT EXISTS omnitest.employee (id INT,name STRING)ROW FORMAT DELIMITED FIELDS TERMINATED BY ','STORED AS TEXTFILE;"
```


2. 负载劫持。
  首先对用户负载进行劫持，获取用户负载及相关信息，以便后续能够调优。负载劫持的步骤参见使用Spark任务前台劫持功能。

```
export enable_omniadvisor=true
spark-sql --master yarn --deploy-mode client --driver-cores 8 --driver-memory 20G --num-executors 36 --executor-cores 8 --executor-memory 29g -e "SELECT * FROM omnitest.employee;"
```


  当一条负载被劫持并记录进数据库后，用户下发相同的负载，会劫持用户的命令，并替换用户当前使用的配置为系统推荐的最优的配置（在OmniAdvisor参数调优2.0软件的初始状态，则使用用户当前使用的配置）。推荐配置若执行失败，则回退为用户的默认配置。

3. 查询负载等信息。
  执行负载并劫持后，在后台管理页面查看相关信息，详细操作步骤请参见（可选）使能后台数据管理页面。

  本次示例中是DatabaseLoad object(7)，括号中的7表示load_id。该load_id将在4中用到，用户在操作过程中，请根据实际情况修改load_id。

4. 启用调优。

  - 示例1
    使用专家调优，对“load_id”为“7”的负载进行调优，期间在后台复测，复测次数为“$OMNIADVISOR_HOME/BoostKit-omniadvisor_2.0.0/config/common_config.ini”中“tuning.retest.times”的值。

```
python tuning.pyc -l 7 -r backend -t expert
```


  - 示例2
    使用OmniAdvisor2.0中默认的调优策略以及历史调优记录，共同决定当前的调优方式。

```
python tuning.pyc -l 7 -r backend
```


调优结束后，会更新负载的最优配置信息，以便2能够使用最优配置。
