调优Spark任务

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

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

    1. 打开“/opt/OmniAdvisor/BoostKit-omniadvisor_1.0.0/config/common_config.cfg”文件配置项。
      1
      vi /opt/OmniAdvisor/BoostKit-omniadvisor_1.0.0/config/common_config.cfg
      
    2. “i”进入编辑模式,在文件中修改以下内容。common_config.cfg配置文件参数说明请参见common_config.cfg
      1
      2
      3
      4
      5
      [database]
      # MySQL数据库相关的用户名,端口号等信息
      db_name = test_spark
      db_host = localhost
      db_port = 3306
      
    3. “Esc”键,输入:wq!,按“Enter”保存并退出编辑。
    4. 执行初始化命令。
      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”配置文件。
    1. 打开文件。
      1
      vi /opt/OmniAdvisor/boostkit-omniadvisor-log-analyzer-1.0.0-aarch64/conf/omniAdvisorLogAnalyzer.properties
      
    2. “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
      
    3. “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”的配置文件。
      1. 打开文件。
        1
        vi /opt/OmniAdvisor/boostkit-omniadvisor-log-analyzer-1.0.0-aarch64/conf/omniAdvisorLogAnalyzer.properties
        
      2. “i”进入编辑模式,增加或修改如下配置。omniAdvisorLogAnalyzer.properties配置文件参数说明请参见omniAdvisorLogAnalyzer.properties
        1
        2
        3
        spark.eventLogs.mode=rest
        # Spark History Server的URL
        spark.rest.url=http://server1:18080
        
      3. “Esc”键,输入:wq!,按“Enter”保存并退出编辑。
    • log模式配置。修改“/opt/OmniAdvisor/boostkit-omniadvisor-log-analyzer-1.0.0-aarch64/conf/omniAdvisorLogAnalyzer.properties”的配置文件。
      1. 打开文件。
        1
        vi /opt/OmniAdvisor/boostkit-omniadvisor-log-analyzer-1.0.0-aarch64/conf/omniAdvisorLogAnalyzer.properties
        
      2. “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
        
      3. “Esc”键,输入:wq!,按“Enter”保存并退出编辑。
      4. 将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. 调用日志解析模块,将解析的数据写入数据库。

    1. 打开“/opt/OmniAdvisor/BoostKit-omniadvisor_1.0.0/config/common_config.cfg”配置文件。
      1
      vi /opt/OmniAdvisor/BoostKit-omniadvisor_1.0.0/config/common_config.cfg
      
    2. “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
      
    3. “Esc”键,输入:wq!,按“Enter”保存并退出编辑。
    4. 执行采集命令。
      1
      python main.pyc spark fetch_history_data
      

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

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

    • 采样所有历史任务的参数,每个任务采样参数40次。
      1. 打开“/opt/OmniAdvisor/BoostKit-omniadvisor_1.0.0/config/common_config.cfg”配置文件。
        1
        vi /opt/OmniAdvisor/BoostKit-omniadvisor_1.0.0/config/common_config.cfg
        
      2. “i”进入编辑模式,修改参数如下。common_config.cfg配置文件参数说明请参见common_config.cfg
        1
        2
        3
        4
        5
        [sampling]
        # 参数采样的轮数
        sampling_epochs = 40
        [spark]
        enable_sampling_all_sql = true
        
      3. “Esc”键,输入:wq!,按“Enter”保存并退出编辑。
      4. 打开“/opt/OmniAdvisor/BoostKit-omniadvisor_1.0.0/config/spark/spark_config.yml”配置文件,根据yaml配置文件中的注释指导、用户需求,修改参数取值范围或者新增调优参数。
      5. 执行采集命令。
        1
        python main.pyc spark parameter_sampling
        

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

    • 采样指定历史任务参数40次。
      1. 打开“/opt/OmniAdvisor/BoostKit-omniadvisor_1.0.0/config/common_config.cfg”配置文件。
        1
        vi /opt/OmniAdvisor/BoostKit-omniadvisor_1.0.0/config/common_config.cfg
        
      2. “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
        
      3. “Esc”键,输入:wq!,按“Enter”保存并退出编辑。
      4. 执行采集命令。
        1
        python main.pyc spark parameter_sampling
        

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

  6. 修改执行脚本。

    1. 复制原生的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
    2. 打开spark-sql-recommend脚本。
      1
      vi spark-sql-recommend
      
    3. “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 "$@"
      
    4. “Esc”键,输入:wq!,按“Enter”保存并退出编辑。

  7. 推荐采样中运行最优的参数来执行任务。

    • 根据任务名称application_name推荐参数。
      1. 打开“/opt/OmniAdvisor/BoostKit-omniadvisor_1.0.0/config/common_config.cfg”配置文件。
        1
        vi /opt/OmniAdvisor/BoostKit-omniadvisor_1.0.0/config/common_config.cfg
        
      2. “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
        
      3. “Esc”键,输入:wq!,按“Enter”保存并退出编辑。
      4. 执行命令。以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推荐参数。
      1. 打开“/opt/OmniAdvisor/BoostKit-omniadvisor_1.0.0/config/common_config.cfg”配置文件。
        1
        vi /opt/OmniAdvisor/BoostKit-omniadvisor_1.0.0/config/common_config.cfg
        
      2. “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
        
      3. “Esc”键,输入:wq!,按“Enter”保存并退出编辑。
      4. 执行命令。以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