天天看點

賽題解析 | 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 極客挑戰賽

繼續閱讀