大数据集群性能基准测试(Benchmark)方法:TPC-DS/TPC-H
在大数据平台上线或升级后,如何进行性能基准测试?请解释TPC-DS和TPC-H两种标准测试集的区别、测试数据集生成方法(dsdgen/dbgen)、关键性能指标(查询响应时间/吞吐量/资源利用率)、以及如何解读测试结果进行性能对比。给出一个在Spark/Hive上运行TPC-DS测试的完整流程示例。
回答
我是大山
大数据基准测试(TPC-DS/TPC-H):
1. TPC-DS vs TPC-H: | 特性 | TPC-DS | TPC-H | |------|--------|-------| | 场景 | 决策支持系统 | Oracle/DB2时代标准 | | 表数 | 24张表(7事实+17维度)| 8张表 | | 查询数 | 99个复杂的SQL | 22个SQL | | 数据倾斜 | ✅ 模拟真实业务倾斜 | ❌ 均匀分布 | | SQL复杂度 | 高(多层子查询/Windowing/ROLLUP)| 中等 | | 适用 | 现代OLAP引擎(Spark/Flink/ClickHouse)| 传统数据库 |
2. 数据生成:
# TPC-DS数据生成
# 下载tpcds-kit
wget https://github.com/databricks/tpcds-kit/archive/refs/tags/v1.8.0.tar.gz
cd tpcds-kit/tools
# 生成100GB数据(Scale Factor=100)
./dsdgen -SCALE 100 -DIR /data/tpcds_100g -PARALLEL 8
# TPC-H数据生成
./dbgen -s 100 -T a -f -q # 100GB
3. Spark上运行TPC-DS测试:
# 1. 加载数据到Hive
spark-sql -f tpcds_ddl.sql # 建表DDL
# 2. 导入数据
for tbl in $(cat tables.txt); do
spark-sql -e "
LOAD DATA LOCAL INPATH '/data/tpcds_100g/$tbl/'
OVERWRITE INTO TABLE tpcds.$tbl;"
done
# 3. 收集统计信息
spark-sql -e "ANALYZE TABLES IN tpcds COMPUTE STATISTICS;"
# 4. 执行99个查询
for q in $(seq 1 99); do
start=$(date +%s%N)
spark-sql -f "tpcds_queries/query$q.sql" > /dev/null
end=$(date +%s%N)
echo "Query $q: $(((end-start)/1000000))ms" >> result.log
done
# 5. 计算总耗时和平均耗时
4. 关键性能指标: | 指标 | 说明 | |------|------| | Power@Size | 单个用户串行执行99个查询的总时间 | | Throughput@Size | 多用户并发执行吞吐量 | | QphDS@Size | 综合性能评分 | | 资源利用率 | CPU/内存/IO/网络峰值 | | 查询失败率 | OOM/超时等失败查询数 |
5. 测试注意事项:
- 预热(Warm Cache)后测试2~3次取平均
- 记录Spark/Flink配置和集群规模
- 关注长尾Query(最慢的几个查询分析瓶颈)
- 使用
spark.sql.adaptive.enabled等优化配置 - 对比不同引擎(Spark SQL vs Trino vs ClickHouse)