背景介绍
集群环境
天翼云翼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倍。