首届 E-MapReduce 极客挑战赛正在火热进行中,快来报名参加吧!
报名链接:(报名时间即日起至 09/21):https://tianchi.aliyun.com/competition/entrance/531912/introduction
E-MapReduce 极客挑战赛钉钉交流群:35434038
本文主要讲解自测工具的使用以及代码的提交和评测,帮助选手更高效的解题。
直播回放链接:
https://developer.aliyun.com/live/247179
一、初赛赛题说明
EMR 团队提供用于比赛的 Spark 3.1.2 代码分支,选手进行 Spark 代码优化和参数调优以提升 SparkSQL 执行效率,同时组委会提供性能测评工具供选手自行测试(单机环境或EMR集群环境)。在比赛阶段,选手将最终优化后的 Spark 代码和调优参数打包,通过天池平台提交,天池平台会使用相同的性能测评工具,进行评测和排名。初赛测评环境的 EMR 集群配置参考“初赛测评环境软硬件配置”。
二、测评工具使用说明
参考文档:https://github.com/tianchi-emr/spark-sql-perf/blob/tianchi/README.md
Benchmark 工具:https://github.com/tianchi-emr/spark-sql-perf
将代码 clone 到本地
tpcds-kit 工具编译
进入 resource/bin
目录,运行 compile.sh
脚本进行编译步骤,该编译脚本目前仅支持在LINUX和MACOS系统上进行编译
cd resource/bin bash compile.sh
生成数据集
进入resource/bin
目录,修改params.conf
配置文件,指定如下配置项:
- SCALE_FACTOR:生成数据集规模,本地测试可选择1
- ITERATIONS:执行轮数
- DATA_LOCATION:生成数据集的存储路径,需要预留有足够的存储空间
- RESULT_LOCATION:结果输出路径
- DATA_GEN_SPARK_MASTER:生成数据集运行的 spark 程序的 master,本地测试需要填写 local[N],其中 N 为所使用的 CPU 核心数
配置完成后,运行datagen.sh
脚本进行数据生成(执行过程中 dsdgen 工具输出的 stderr日 志会被 sbt 判定为 [error] 日志,可以忽略)。
cd resource/bin vim params.conf bash datagen.sh
执行脚本时,以防误删会先提示确认数据生成路径,确认无误输入" Y "继续执行。
执行成功后可查看下文件夹大小
运行 TPC-DS Benchmark 测试
进入resource/bin
目录,修改params.conf
配置文件,指定如下配置项:
- SCALE_FACTOR:生成数据集规模,与生成数据集时配置内容相同,生成数据集配置后无需修改
- ITERATIONS:Benchmark 执行轮数
- DATA_LOCATION:数据集存储目录,与生成数据集时配置内容相同,生成数据集配置后无需修改
- SPARK_DIR:选手优化后 Spark 安装目录
(选手对 spark 代码进行打包,指定路径)
- TPCDS_RUN_SPARK_MASTER:Benchmark 运行的 spark 程序的 master,本地测试需要填写 local[N],其中 N 为所使用的 CPU 核心数
配置完成后,运行run_tpcds.sh
脚本执行测试。
cd resource/bin vim params.conf bash run_tpcds.sh
运行完成后,选手可查看运行时间判断代码优化效果。
Benchmark 默认会执行所有生成的 query,可以修改src/main/notebooks/tpcds_run_emr.scala
脚本中的 query_filter 变量进行 query 指定。
val query_filter = Seq() // Seq() == all queries val query_filter = Seq("q1-v2.4", "q2-v2.4") // run subset of queries
如果希望排除某些 query 不运行,可以将exclude
变量设置为 true。
val exclude = true val query_filter = Seq("q77-v2.4") // all queries except q77
此外,如果有参数的优化,可以在文件中进行修改。例如修改 spark.conf,把参数设置为优化的参数,也能对优化的参数进行性能测试。
三、提交评测说明
选手基于比赛提供的 Spark 代码进行优化,并将调优的 Spark 参数写入到 Spark 代码 conf/spark-defaults.conf 文件中,将优化后的 Spark 代码打包后提交至天池平台。平台会将 Spark 包自动部署到比赛提供的阿里云 EMR 集群,并使用 Benchmark 工具加载选手调优的 Spark 参数进行测试。打包需要确认 conf/spark-defaults.conf 文件存在,打包命令如下:
mvn -Phive,yarn -Phadoop-3.2 -Dhadoop.version=3.2.1 clean -DskipTests ./dev/make-distribution.sh --tgz -B -e -Phadoop-3.2 -Phive -Pyarn
在目录下会生成一个 tgz 文件,包含优化的 spark 代码编译后的架包以及优化的 spark-defaults.conf 的配置参数等
为确保优化参数在最终测评时生效,需确保在 conf 目录下,放入 spark-defaults.conf 文件并保证文件名正确。
打包完成后到天池平台进行上传评测。
提交地址:https://tianchi.aliyun.com/competition/entrance/531912/submission/827
评测需要一定时间,评测程序执行完成后,可在我的成绩中查看结果。
四 总结
本文结合首届 E-MapReduce 极客挑战赛的赛题说明,通过实操演示讲解了自测工具的使用以及代码的提交和评测。希望对参加比赛的同学们能有所帮助,也欢迎更多的技术同学报名参加我们的挑战赛,一起探讨性能极限。
对比赛感兴趣或者参赛过程中有疑问的小伙伴,欢迎扫描下方二维码加入交流群一起来交流讨论~