使用OmniAdvisor参数调优特性,推荐Spark任务的最佳运行参数,从而优化任务性能。
1 | vi /opt/OmniAdvisor/BoostKit-omniadvisor_1.0.0/config/common_config.cfg
|
1 2 3 4 5 | [database] # MySQL数据库相关的用户名,端口号等信息 db_name = test_spark db_host = localhost db_port = 3306 |
1 | python main.pyc spark init_environment |
执行成功后,会在test_spark数据库中创建yarn_app_result表、best_config表和sampling_config表。
1 | vi /opt/OmniAdvisor/boostkit-omniadvisor-log-analyzer-1.0.0-aarch64/conf/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 |
1 | vi /opt/OmniAdvisor/boostkit-omniadvisor-log-analyzer-1.0.0-aarch64/conf/omniAdvisorLogAnalyzer.properties
|
1 2 3 | spark.eventLogs.mode=rest # Spark History Server的URL spark.rest.url=http://server1:18080 |
1 | vi /opt/OmniAdvisor/boostkit-omniadvisor-log-analyzer-1.0.0-aarch64/conf/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 |
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
1 | vi /opt/OmniAdvisor/BoostKit-omniadvisor_1.0.0/config/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 |
1 | python main.pyc spark fetch_history_data |
数据解析成功后,将数据结果写入了yarn_app_result表和best_config表中,sampling_config表中仍是空的。
1 | vi /opt/OmniAdvisor/BoostKit-omniadvisor_1.0.0/config/common_config.cfg
|
1 2 3 4 5 | [sampling] # 参数采样的轮数 sampling_epochs = 40 [spark] enable_sampling_all_sql = true |
1 | python main.pyc spark parameter_sampling |
执行成功后可以在数据库中的sampling_config表查看到采样的数据。
1 | vi /opt/OmniAdvisor/BoostKit-omniadvisor_1.0.0/config/common_config.cfg
|
1 2 3 4 5 6 7 | [sampling] # 参数采样的轮数 sampling_epochs = 40 [spark] enable_sampling_all_sql = false history_application_name=q12 |
1 | python main.pyc spark parameter_sampling |
执行成功后可以在数据库中的sampling_config表查看到采样的数据,采样调优完成之后,才能对该任务进行参数推荐。
rm -rf $SPARK_HOME/bin/spark-sql-recommend cp $SPARK_HOME/bin/spark-sql $SPARK_HOME/bin/spark-sql-recommend
1 | vi spark-sql-recommend
|
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 "$@" |
1 | vi /opt/OmniAdvisor/BoostKit-omniadvisor_1.0.0/config/common_config.cfg
|
1 2 3 4 | [recommend] # 任务采样调优完成后,需要重新运行某个历史任务,可以通过任务的名称(application_name)或者query的hash值(query_hash)来指定查找数据库中该任务的最佳参数 # options: [application_name, query_hash] recommend_identifier = application_name |
$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
1 | vi /opt/OmniAdvisor/BoostKit-omniadvisor_1.0.0/config/common_config.cfg
|
1 2 3 4 | [recommend] # 任务采样调优完成后,需要重新运行某个历史任务,可以通过任务的名称(application_name)或者query的Hash值(query_hash)来指定查找数据库中该任务的最佳参数 # options: [application_name, query_hash] recommend_identifier = 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 |