TPC-DS测试机制是TPC组织推出用于替代TPC-H的下一代决策支持系统测试基准,本文介绍如何在EMR集群完成运行TPC-DS的99个SQL。
下载如下 TPC-DS Benchmark 工具包,下载之后将工具包上传到您的TOS中的tos://{bucket-path}/tpcds/tools/路径下。
生成数据使用的包
生成数据依赖包
查询数据使用包
获取表统计信息
示例代码。
apiVersion: "sparkoperator.k8s.io/v1beta2" kind: SparkApplication metadata: name: make-tpcds-data spec: type: Scala mode: cluster sparkVersion: 3.5.1 mainClass: com.databricks.spark.sql.perf.tpcds.GenTPCDSData mainApplicationFile: "tos://{bucket-path}/tpcds/tools/spark-sql-perf-assembly.jar" # 应用执行的参数 (位于 jar 包之后的参数) arguments: - "--location" - "tos://{bucket-path}/tpcds/tpcds_1t_parquet_zstd" - "--scaleFactor" - "1000" - "--dsdgenDir" - "./tpcds-kit/tools" - "--format" - "parquet" - "--useDoubleForDecimal" - "false" - "--useStringForDate" - "false" - "--overwrite" - "true" - "--numPartitions" - "128" # Spark Conf 设置 sparkConf: "spark.archives": "tos://{bucket-path}/tpcds/tools/tpcds-kit.zip#tpcds-kit" "spark.driver.userClassPathFirst": "false" "spark.executor.userClassPathFirst": "false" "spark.sql.serverless.lf.auth.enabled": "false" "spark.sql.parquet.compression.codec": "zstd" driver: cores: 4 coreLimit: "4000m" memory: "8g" executor: cores: 4 instances: 128 memory: "12g"
参数说明
参数名称 | 含义 |
|---|---|
--location | 生成的数据在HDFS/对象存储上的目录。 |
--scaleFactor | value数据规模,单位G,1000代表1000G |
结果检查。任务运行成功后可以在配置的location参数对应路径上看到24张表对应的数据目录及数据。示例如下。
数据目录结果示例 | 某张表的数据结果示例 |
|---|---|
示例代码。
说明
通过如下脚本会自动创建数据库和表,请勿提前创建数据库。
apiVersion: "sparkoperator.k8s.io/v1beta2" kind: SparkApplication metadata: name: create-table spec: type: Scala mode: cluster sparkVersion: 3.5.1 mainClass: com.databricks.spark.sql.perf.RegisterTables mainApplicationFile: "tos://{bucket-path}/tpcds/tools/spark-sql-perf-assembly.jar" arguments: - "--location" - "tos://{bucket-path}/tpcds_1t_parquet_zstd" - "--scaleFactor" - "1000" - "--dsdgenDir" - "./tpcds-kit/tools" - "--format" - "parquet" - "--useDoubleForDecimal" - "false" - "--useStringForDate" - "false" - "--overwrite" - "true" - "--numPartitions" - "128" - "--database" - "tpcds_1t_parquet_zstd" sparkConf: "spark.archives": "tos://{bucket-path}/tpcds/tools/tpcds-kit.zip#tpcds-kit" "spark.driver.userClassPathFirst": "false" "spark.executor.userClassPathFirst": "false" "spark.sql.serverless.lf.auth.enabled": "false" "spark.sql.parquet.compression.codec": "zstd" driver: cores: 4 memory: "8g" executor: cores: 4 instances: 128 memory: "12g"
参数说明
参数名称 | 含义 |
|---|---|
--location | 生成的数据在HDFS/对象存储上的目录 |
--database | 数据库名称 |
结果检查。建表成功后可以在hive catalog下搜索到对应的库,例如:tpcds_1g_parquet_zstd。示例如下。
示例代码。推荐使用ANALYZE TABLE命令获取表统计信息,可以加快后续SQL的查询速度。
apiVersion: "sparkoperator.k8s.io/v1beta2" kind: SparkApplication metadata: name: analyze-tpcds-tables spec: type: Scala sparkVersion: 3.5.1 mainApplicationFile: "tos://{bucket-path}/tpcds/tools/analyze_table.py" arguments: - "--database" - "tpcds_1t_parquet_zstd" driver: cores: 2 memory: 4g executor: cores: 2 memory: 2g memoryOverhead: 2g instances: 5 sparkConf: "spark.sql.serverless.lf.auth.enabled": "false"
结果检查。任务成功运行后可以在catalog中Table properties里看到相关分析统计信息。示例如下。
示例代码。
apiVersion: "sparkoperator.k8s.io/v1beta2" kind: SparkApplication metadata: name: run-tpcds-benchmark spec: type: Scala mode: cluster sparkVersion: 3.5.1 mainClass: com.bytedance.emr.spark.SparkSqlTpcds mainApplicationFile: "tos://{bucket-path}/tpcds/tools/playground-1.0-SNAPSHOT.jar" arguments: - "--resultFilePrefix" - "tos://{bucket-path}/tpcds/results/{report-name}" - "--database" - "tpcds_1t_parquet_zstd" - "--rounds" - "3" # Spark 引擎配置 sparkConf: "spark.driver.userClassPathFirst": "false" "spark.executor.userClassPathFirst": "false" "spark.sql.serverless.lf.auth.enabled": "false" driver: cores: 4 memory: "12g" executor: cores: 4 instances: 64 memory: "12g"
参数名称 | 含义 |
|---|---|
--resultFilePrefix | 生成的tpcds测试报告结果存储的路径前缀 |
--database | 数据库名称 |
--rounds | 测试轮次 |
--sqls | 自定义指定多个sql,用&分割,不设置默认跑全部sql。 |
结果检查。在--resultFilePrefix参数指定的路径下查看测试结果,示例如下。