赛题解析 | E-MapReduce 极客挑战赛

首届 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 到本地

赛题解析 | E-MapReduce 极客挑战赛

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 核心数

  赛题解析 | E-MapReduce 极客挑战赛

配置完成后,运行datagen.sh脚本进行数据生成(执行过程中 dsdgen 工具输出的 stderr日 志会被 sbt 判定为 [error] 日志,可以忽略)。

cd resource/bin
vim params.conf
bash datagen.sh

执行脚本时,以防误删会先提示确认数据生成路径,确认无误输入" Y "继续执行。

赛题解析 | E-MapReduce 极客挑战赛

执行成功后可查看下文件夹大小

赛题解析 | E-MapReduce 极客挑战赛

运行 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 核心数

  赛题解析 | E-MapReduce 极客挑战赛

配置完成后,运行run_tpcds.sh脚本执行测试。

cd resource/bin
vim params.conf
bash run_tpcds.sh

运行完成后,选手可查看运行时间判断代码优化效果。

赛题解析 | E-MapReduce 极客挑战赛

Benchmark 默认会执行所有生成的 query,可以修改src/main/notebooks/tpcds_run_emr.scala脚本中的 query_filter 变量进行 query 指定。

赛题解析 | E-MapReduce 极客挑战赛

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,把参数设置为优化的参数,也能对优化的参数进行性能测试。

赛题解析 | E-MapReduce 极客挑战赛

三、提交评测说明

选手基于比赛提供的 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 的配置参数等

赛题解析 | E-MapReduce 极客挑战赛

为确保优化参数在最终测评时生效,需确保在 conf 目录下,放入 spark-defaults.conf 文件并保证文件名正确。

赛题解析 | E-MapReduce 极客挑战赛

打包完成后到天池平台进行上传评测。

提交地址:https://tianchi.aliyun.com/competition/entrance/531912/submission/827

赛题解析 | E-MapReduce 极客挑战赛

赛题解析 | E-MapReduce 极客挑战赛

评测需要一定时间,评测程序执行完成后,可在我的成绩中查看结果。


四 总结

本文结合首届 E-MapReduce 极客挑战赛的赛题说明,通过实操演示讲解了自测工具的使用以及代码的提交和评测。希望对参加比赛的同学们能有所帮助,也欢迎更多的技术同学报名参加我们的挑战赛,一起探讨性能极限。


对比赛感兴趣或者参赛过程中有疑问的小伙伴,欢迎扫描下方二维码加入交流群一起来交流讨论~

赛题解析 | E-MapReduce 极客挑战赛

上一篇:数据湖实操讲解【 JindoTable 计算加速】第二十二讲:对 Hive 数仓表进行高效小文件合并


下一篇:mysql存储过程递归调用