Spark做TPC-DS性能测试

简介: Spark做TPC-DS性能测试

背景


最近由于在做上云的工作,并且公司离线部分引擎是Spark,所以做了一次基于TPC-DS性能比对测试。


云上和云下的机器主要不同如下:

不同点

云上

云下

存储

OSS

HDFS

机器CPU

Intel®Xeon®Platinum 8269CY CPU@2.50GHz

Intel®Xeon®Gold 6626 CPU@2.70GHz

TPC-DS是什么


如下解释:

TPC-DS is a data warehousing benchmark defined by the Transaction Processing Performance Council (TPC)
The “DS” in TPC-DS stands for “decision support.”

TPC-DS数据来源


进行TPCDS的数据来源需要我们自己生产,参考Spark Commiter和PMC的项目 spark-tpcds-datagen,具体的生产数据命令如下:

nohup ./bin/dsdgen --output-location /tmp/spark-tpcds-data --overwrite --scale-factor 600 --partition-tables --num-partitions 100 &>dsdgen.log &

生产了大约200GB的数据


TPC-DS的SQL来源


目前很多引擎都自带了TPC-DS的sql语句(如Trino,Spark),目前我们参考Spark的提供的sql语句如下:


TPC-DS v1.4


TPC-DS v2.7


运行TPC-DS Benchemark


由于spark内置的TPCDSQueryBenchmark.scala里是local模式运行,所以我们得修改成如下:

vi  spark/sql/core/src/test/scala/org/apache/spark/sql/execution/benchmark/TPCDSQueryBenchmark.scala
  override def getSparkSession: SparkSession = {
    val conf = new SparkConf()
//      .setMaster("local[1]")
      .setAppName("test-sql-context")
//      .set("spark.sql.parquet.compression.codec", "snappy")
//      .set("spark.sql.shuffle.partitions", "4")
//      .set("spark.driver.memory", "3g")
//      .set("spark.executor.memory", "3g")
//      .set("spark.sql.autoBroadcastJoinThreshold", (20 * 1024 * 1024).toString)
//      .set("spark.sql.crossJoin.enabled", "true")

同时还得修改脚本spark-tpcds-datagen/bin/report-tpcds-benchmark,如下:

vi spark-tpcds-datagen/bin/report-tpcds-benchmark
\\ 删除以下四个配置
--conf spark.ui.enabled=false          \
  --conf spark.master=local[1]           \
  --conf spark.driver.memory=60g         \
  --conf spark.sql.shuffle.partitions=32 \

用如下命令进行测试

nohup ./bin/report-tpcds-benchmark /tmp/spark-tpcds-data /tmp/benchmark-result &> benchmark.log &

结果


[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-yIDFoehO-1685524759310)(null)]


作图的工具可以参考:

3.png

其他有意思的文章如下:


dsdgen


tpcds-kit


warehouse-performance-record

相关文章
|
分布式计算 大数据 Spark
大数据-95 Spark 集群 SparkSQL Action与Transformation操作 详细解释与测试案例(二)
大数据-95 Spark 集群 SparkSQL Action与Transformation操作 详细解释与测试案例(二)
232 1
|
存储 SQL 分布式计算
大数据-95 Spark 集群 SparkSQL Action与Transformation操作 详细解释与测试案例(一)
大数据-95 Spark 集群 SparkSQL Action与Transformation操作 详细解释与测试案例(一)
303 0
|
分布式计算 Shell Linux
Spark-集群安装、部署、启动、测试(1.6.3)稳定版
Spark-集群安装、部署、启动、测试(1.6.3)稳定版
306 0
|
分布式计算 Java 测试技术
Spark 单元测试报Error:(26, 16) java: 程序包sun.misc不存在
Spark 单元测试报Error:(26, 16) java: 程序包sun.misc不存在
692 0
|
分布式计算 Hadoop Scala
Spark【环境搭建 01】spark-3.0.0-without 单机版(安装+配置+测试案例)
【4月更文挑战第13天】Spark【环境搭建 01】spark-3.0.0-without 单机版(安装+配置+测试案例)
863 0
|
分布式计算 资源调度 Hadoop
Spark on Yarn集群模式搭建及测试
Spark on Yarn集群模式搭建及测试
1012 0
|
分布式计算 监控 Oracle
Spark Standalone环境搭建及测试
Spark Standalone环境搭建及测试
416 0
|
数据可视化 前端开发 测试技术
接口测试新选择:Postman替代方案全解析
在软件开发中,接口测试工具至关重要。Postman长期占据主导地位,但随着国产工具的崛起,越来越多开发者转向更适合中国市场的替代方案——Apifox。它不仅支持中英文切换、完全免费不限人数,还具备强大的可视化操作、自动生成文档和API调试功能,极大简化了开发流程。
|
11月前
|
Java 测试技术 容器
Jmeter工具使用:HTTP接口性能测试实战
希望这篇文章能够帮助你初步理解如何使用JMeter进行HTTP接口性能测试,有兴趣的话,你可以研究更多关于JMeter的内容。记住,只有理解并掌握了这些工具,你才能充分利用它们发挥其应有的价值。+
1549 23
|
SQL 安全 测试技术
2025接口测试全攻略:高并发、安全防护与六大工具实战指南
本文探讨高并发稳定性验证、安全防护实战及六大工具(Postman、RunnerGo、Apipost、JMeter、SoapUI、Fiddler)选型指南,助力构建未来接口测试体系。接口测试旨在验证数据传输、参数合法性、错误处理能力及性能安全性,其重要性体现在早期发现问题、保障系统稳定和支撑持续集成。常用方法包括功能、性能、安全性及兼容性测试,典型场景涵盖前后端分离开发、第三方服务集成与数据一致性检查。选择合适的工具需综合考虑需求与团队协作等因素。
2057 24