背景介紹
集群環境
| 天翼云翼MapReduce Spark版本/開源Spark-3.3.3版本 |
|---|
| USED Processors/Cores/Threads: 1001+30 YARN Cores(Threads) USED Memory: 5001+60 GB YARN Memory |
| Total Processors/Cores/Threads:(40+6)/(1040+168)/(1040+336) 關閉超線程 Total Memory: 7680+384 GBYARN Memory? |
| Master節點(3臺): Processors: 2 * Intel(R) Xeon(R) Gold 6348 CPU @ 2.60GHz, 28 Cores Memory: 128 GB Network: Bandwidth: 40 Gbps Storage Device: 2?*?480 GB SSD Disk (boot disk) 12 * 8 TB HDD |
| Core節點(20臺): Processors: 2?*?Intel(R) Xeon(R) Gold 5320 CPU @ 2.20GHz, 26Cores Memory(3 Types): 384GB(13臺 16 GB *?24,16臺32 GB *?12,1臺16 GB * 4+32 GB * 8) Network: Bandwidth: 25 Gbps Storage Device: 2 * 480 GB SSD (Boot disk) 2 * 3.2 TB PCIE?NVMe?SSD (Data disk) 8 * 12 TB HDD? |
| 操作系統: CTyunOS 2.0.1 |
測試目的及重點
本測試旨在測試天翼云翼MapReduce服務下Spark計算引擎性能。重點測試Spark引擎進行10T數據量標準TPC-DS測試的QphDS@SF分數,對比開源Spark-3.3.3版本的分數。
QphDS@SF分數計算公式
| 參數名稱 | 計算方式 | 單位 | 已確認數值 |
|---|---|---|---|
| Sq | 自定義(需≥4) | Stream | 4 |
| SF | 測試數據量的大小 | GB | 10000 |
| Q | Sq * 99 | Queries | 396 |
| T_load | 數據導入的時間 | Second | |
| T_ld | 0.01 **S*q * T_load | Hour | |
| T_power | Power Test時間(99條SQL運行) | Second | |
| T_pt | T_power * Sq?/3600 | Hour | |
| T_tt1 | Throughput Test 1時間(并行4個99條SQL) | Second | |
| T_tt2 | Throughput Test 2時間(并行4個99條SQL) | Second | |
| T_dm1 | Maintenance Test 1時間(事務操作) | Second | |
| T_dm2 | Maintenance Test 2時間(事務操作) | Second | |
| T_tt | ( T_tt1+T_tt2 )/3600 | Hour | |
| T_dm | ( T_dm1+T_dm2 )/3600 | Hour |
測試步驟
測試準備
生成數據
通過集成TPC-DS官網測試工具TPC-DS_Tools_v3.2.0的程序來生成數據。通過調整數據生成程序中相關Hadoop參數,優化后續數據導入的時間。
生成SQL
從官方提供的99條SQL模板生成Power Test和Throughput Test 所需SQL,從官方提供的mtsqls模板中生成Maintenance Test所需SQL。
利用工具用以下兩種命令生成本次測試使用的SQL。由于生成數據的命令中含有隨機數,所以生成的SQL在過濾條件上有所不同。
./dsqgen -directory ../query_templates -input ../query_templates/templates.lst -scale $SCALE -streams 9 -output_dir ${QUERY_DIR} -dialect sparksql -rngseed `date +%m%d%H%M%S%1N`
sed -i "s/XXX_XX_1/$date1_1/g" ${MT_QUERY_DIR}/mt_queries_$id/*.sql
導入數據Load Test( T_ld )并驗證數據量
將生成的數據以Parquet格式導入到Hive的庫中。測試庫中有表24張,包括維度表date_dim、time_dim、item、customer、customer_demographics、household_demographics、customer_address、store、promotion、warehouse、ship_mode、reason、income_band、call_center、web_page、catalog_page、web_site共17張和事實表store_sales、store_returns、web_sales、web_returns、catalog_sales、catalog_returns、inventory共7張。
驗證表的數據量結果見下表,10T的數據行數與官網材料參考值會有少許偏差,TPC官網的TPC-DS榜上公司報告中也有同樣的情況。
10T表行數統計
| 表名 | 翼MR Spark/開源Spark-3.3.3 | 官方參考值 |
|---|---|---|
| call_center | 54 | 54 |
| catalog_page | 40000 | 40000 |
| catalog_returns | 1440033112 | 1440033112 |
| catalog_sales | 14399964710 | 14399964710 |
| customer | 65000000 | 65000000 |
| customer_address | 32500000 | 32500000 |
| customer_demographics | 1920800 | 1920800 |
| date_dim | 73049 | 73049 |
| household_demographics | 7200 | 7200 |
| income_band | 20 | 20 |
| inventory | 1311525000 | 1311525000 |
| item | 402000 | 402000 |
| promotion | 2000 | 2000 |
| reason | 70 | 70 |
| ship_mode | 20 | 20 |
| store | 1500 | 1500 |
| store_returns | 2879544257 | 2879970104 |
| store_sales | 28800104574 | 28799983563 |
| time_dim | 86400 | 86400 |
| warehouse | 25 | 25 |
| web_page | 4002 | 4002 |
| web_returns | 720020485 | 720020485 |
| web_sales | 7199963324 | 7199963324 |
| web_site | 78 | 78 |
運行SQL
Power Test(T_pt)
本測試通過腳本中的以下命令,運行99條查詢類SQL,并獲取運行時間與SQL運行結果。
spark-sql --properties-file ${spark_conf} --database ${db} -f ${QUERY_DIR}/query_0.sql
運行sql之前,本測試會通過以下命令,清除集群環境內所有datanode、nodemanager服務所在節點的緩存,以保證結果的可信度與穩定性。
sync; echo 3 > /proc/sys/vm/drop_caches
Throughput Test(T_tt)
本測試為在總資源固定的情況下,并行的運行4個Power Test,并獲取運行時間與SQL運行結果。
Maintenance Test(T_dm)
本測試為運行包含刪除、插入等事務操作的SQL,獲取運行時間。本測試所需能力為內部對Spark二次開發獲得,開源Spark不支持此能力。如使用Hive事務表,隨機測試單條刪除語句耗時超過300s,而mt1測試中,共48條刪除語句和14條插入語句,因此以開源Spark的mt測試為天翼云翼MR Spark的10倍估算QPhDS@SF分數。
測試結果
| 參數名稱 | 計算方式 | 單位 | 天翼云翼MR Spark | 開源Spark-3.3.3 |
|---|---|---|---|---|
| 總分 QPhDS@SF |
![]() |
QPhDS@SF | 18,847,502QphDS@SF | 5,394,270QphDS@SF |
| Sq | 自定義(需≥4) | Stream | 4 | 4 |
| SF | 測試數據量的大小 | GB | 10000 | 10000 |
| Q | Sq * 99 | Queries | 396 | 396 |
| T_load | 數據導入的時間 | Second | 733.5 | 858.8 |
| T_ld | 0.01 * Sq * T_load/3600 | Hour | 0.0081 | 0.0095 |
| T_power | Power Test時間 | Second | 1053.6 | 3802.5 |
| T_pt | T_power * Sq/3600 | Hour | 1.1707 | 4.2250 |
| T_tt1 | Throughput Test 1時間 | Second | 2696.3 | 7878.0 |
| T_tt2 | Throughput Test 2時間 | Second | 3052.2 | 11990.1 |
| T_dm1 | Maintenance Test 1時間 | Second | 219.4 | 2194.0 |
| T_dm2 | Maintenance Test 2時間 | Second | 241.1 | 2411.0 |
| T_tt | (T_tt1+T_tt2)/3600 | Hour | 1.5968 | 5.5189 |
| T_dm | (T_dm1+T_dm2)/3600 | Hour | 0.1279 | 1.2792 |
| 機器總花銷(元) | RMB | 2,085,460.5 | 2,085,460.5 | |
| 性能平均花費 | Price/Performance | RMB/kQphDS@SF | 110.65 | 386.61 |
測試結論
在10T數據量的TPC-DS測試中,限制YARN集群資源為1031核和5061 GB內存,天翼云翼MR Spark獲得總分為18,847,502QphDS@10000GB,為開源Spark-3.3.3總分的3.5倍。
天翼云翼MR Spark在導入(load test)、串行查詢(power test)、并行查詢(throughput test)、事務(maintenance test)四項測試中性能都超越了開源Spark-3.3.3。其中,串行查詢性能相比開源Spark-3.3.3約提升2.61倍;并行查詢性能相比開源Spark-3.3.3約提升2.45倍。
