使用OmniAdvisor参数调优

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

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

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

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

    1. 在管理节点打开common_config.cfg文件。
      1
      vi $OMNIADVISOR_HOME/BoostKit-omniadvisor_1.1.0/config/common_config.cfg
      
    2. 参考如下配置按实际情况填写。
       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]
      # 日志分析后,用于保存分析结果的数据库的Dirver。
      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
      
    3. “Esc”键,输入:wq!,按“Enter”保存并退出编辑。

  2. 调用OmniAdvisor入参数调优口。

    1. 在管理节点中调用OmniAdvisor参数调优入口,开始通过OmniAdvisor参数调优CLI使用参数调优特性:
      python $OMNIADVISOR_HOME/BoostKit-omniadvisor_1.1.0/main.pyc
    2. 根据提示输入MySQL的用户密码,按“Enter”继续。

    3. 选择调优引擎。

      输入spark或者hive选定调优引擎,或按“Tab”选择引擎。

    4. 选定引擎后,可根据提示选择执行指令:

    5. 输入对应命令即可执行对应操作。
      表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算法进行参数采样。

    1. 输入parameter_sampling或者按“Tab”选择“parameter_sampling”后,按提示输入采样轮数。

    2. 选择是否采样调优数据库中所有任务,默认会对数据库中所有任务进行采样调优;选择no则需要选择指定任务进行调优。

    3. 当选择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"