TPC-DS是巨量資料領域最為知名的Benchmark標準。阿里雲當前EMR Serverless Spark 已登頂全球 TPC-DS 100TB 榜單。本文介紹如何在Serverless Spark結合DLF完整運行TPC-DS的99個SQL,並得到最佳的效能體驗。
前提條件
已經通過共用TPC-DS標準範例資料集建立DLF Catalog,詳情請參見共用範例資料集。
子帳號預設不具備DLF任何許可權,需要授予相應的操作許可權,詳情請參見快速配置許可權。
資料共用目錄提供了多種規格的 TPC-DS 標準範例資料庫,適用於不同規模的資料測試、分析及基準效能評估。具體包含以下資料集:
範例資料庫名稱
範例資料說明
適用情境
tpcds_paimon_sf1
TPC-DS 1G Paimon 表
快速驗證、開發測試
tpcds_paimon_sf2
TPC-DS 2G Paimon 表
中等測試、學習
tpcds_paimon_sf10
TPC-DS 10G Paimon 表
效能測試、壓測
tpcds_paimon_sf100
TPC-DS 100G Paimon 表
生產級 benchmark、效能對比
建立工作空間並綁定DLF Catalog
進入EMR Serverless Spark頁面。
在左側導覽列,選擇。
在頂部功能表列處,根據實際情況選擇地區。
重要建立工作空間後,不能更改地區。
單擊建立工作空間。
在E-MapReduce Serverless Spark頁面,完成相關配置。開啟DLF作為中繼資料服務的開關,資料目錄選擇前提條件中根據共用資料集建立的DLF Catalog。其餘配置說明請參見建立工作空間。
建立工作空間時,已準備建立工作空間所需的帳號並授權:
使用阿里雲主帳號建立,授權詳情請參見阿里雲帳號角色授權。
如果使用RAM使用者(子帳號)或RAM角色建立,請確保已授權該RAM使用者或RAM角色
AliyunEMRServerlessSparkFullAccess、AliyunOSSFullAccess、AliyunDLFFullAccess權限原則。然後,在EMR Serverless Spark的存取控制頁面添加該RAM使用者或RAM角色,並授予管理員角色,詳情請參見RAM使用者授權和系統管理使用者和角色。
測試過程
步驟一:上傳JAR包
單擊spark-tpcds-test.jar,直接下載測試JAR包。
說明spark-tpcds-test.jar基於spark-sql-perf修改而來,針對Serverless Spark情境進行了適配,能夠完整運行TPC-DS的99個SQL。spark-sql-perf是Databricks開源的Spark SQL效能測試架構,提供TPC-DS基準測試能力。
進入資源上傳頁面。
在左側導覽列,選擇。
在Spark頁面,單擊目標工作空間名稱。
在EMR Serverless Spark頁面,單擊左側導覽列中的檔案管理。
在檔案管理頁面,單擊上傳檔案。
在上傳檔案對話方塊中,單擊待上傳檔案地區選取項目本地JAR包,或者直接拖拽JAR包到待上傳檔案地區。
本文樣本是上傳spark-tpcds-test.jar。
步驟二:執行測試
在EMR Serverless Spark頁面,單擊左側的資料開發。
在開發目錄頁簽下,單擊
表徵圖。輸入名稱,類型選擇,然後單擊確定。
在右上方選擇隊列。
添加隊列的具體操作,請參見管理資源隊列。
在建立的任務開發中,配置以下資訊,其餘參數無需配置,然後單擊運行。
參數
說明
主jar資源
選擇前一個步驟中上傳的JAR包。本文樣本是spark-tpcds-test.jar。
引擎版本
推薦選擇最新版本,如esr-4.6.0。
Fusion加速
開啟
Main Class
com.serverlessspark.tpcds.SparkTPCDS運行參數
--database tpcds_paimon_sf100說明--database:用於測試的資料庫名稱,您可以根據需要調整測試所使用的資料庫。資料庫名稱可在Serverless Spark資料目錄中查看。
資源配置
按照下述配置任務預計消耗132CU/小時:
spark.driver.cores 4 spark.driver.memory 14G spark.executor.cores 4 spark.executor.memory 14G spark.executor.instances 32 spark.driver.memoryOverhead 2g spark.executor.memoryOverhead 2gSpark配置
展開自訂配置,在Spark配置中加入下述配置:
spark.gluten.sql.columnar.backend.velox.resizeBatches.shuffleInput false spark.gluten.sql.columnar.backend.velox.SplitPreloadPerDriver 2 spark.gluten.sql.columnar.backend.velox.IOThreads 16 spark.hadoop.fs.oss.mt-read.enable true spark.hadoop.fs.oss.mt-read.threads 16 spark.hadoop.fs.emr.loadQuantum 8388608 spark.sql.shuffle.partitions 400 spark.sql.cbo.enabled true spark.sql.files.maxPartitionBytes 512m spark.default.parallelism 200 spark.locality.wait 0s spark.sql.crossJoin.enabled true spark.sql.adaptive.localShuffleReader.enabled true spark.sql.fuse.unionAllOnJoin.enabled true spark.sql.optimizer.runtime.bloomFilter.enabled true spark.sql.optimizer.enableMergeScalarAggsInInnerJoin true spark.sql.optimizer.pushdownAggregateBelowJoin true spark.sql.optimizer.inferDistinctFromIntersect true spark.sql.optimizer.groupSplitsByLocation false spark.sql.adaptive.amend.join.selection.enabled true spark.sql.mergeScalaSubquery.pullupAggFilter true spark.sql.execution.optimizeExpand true spark.sql.execution.optimizeExpand.ratio 5 spark.sql.legacy.ctePrecedencePolicy LEGACY spark.sql.auto.reused.cte.enabled true spark.sql.auto.clear.cte.cache.enabled true spark.locality.wait.node 0s spark.sql.sources.ignoreDataLocality true spark.shuffle.manager org.apache.spark.shuffle.sort.ColumnarShuffleManager spark.celeborn.client.adaptive.optimizeLocalShuffleRead.enabled true
步驟三:查看結果
運行任務後,在下方的運行記錄地區,單擊任務操作列的日誌探查,您可以查看相關的日誌資訊。
您也可以進入營運中心的任務歷史頁面,查看任務的執行情況。
