You need to enable JavaScript to run this app.
E-MapReduce

E-MapReduce

复制全文
EMR on VKE最佳实践
在 EMR on VKE 集群运行 TPC-DS Benchmark
复制全文
在 EMR on VKE 集群运行 TPC-DS Benchmark

TPC-DS测试机制是TPC组织推出用于替代TPC-H的下一代决策支持系统测试基准,本文介绍如何在EMR集群完成运行TPC-DS的99个SQL。

前提条件

下载如下 TPC-DS Benchmark 工具包,下载之后将工具包上传到您的TOS中的tos://{bucket-path}/tpcds/tools/路径下。

  • 生成数据使用的包

    tpcds-kit.zip
    未知大小

  • 生成数据依赖包

    spark-sql-perf-assembly.jar
    未知大小

  • 查询数据使用包

    playground-1.0-SNAPSHOT.jar
    未知大小

  • 获取表统计信息

    analyze_table.py
    未知大小

操作流程

步骤一:数据处理

生成并加载数据

  1. 示例代码。

    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/对象存储上的目录。
    value示例,"tos://bucket_name/tpcds/tpcds_1t_parquet_zstd"

    --scaleFactor

    value数据规模,单位G,1000代表1000G
    value示例,1000

  2. 结果检查。任务运行成功后可以在配置的location参数对应路径上看到24张表对应的数据目录及数据。示例如下。

    数据目录结果示例

    某张表的数据结果示例

    Image

    Image

建表

  1. 示例代码。

    说明

    通过如下脚本会自动创建数据库和表,请勿提前创建数据库。

    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/对象存储上的目录
    value示例:"tos://bucket_name/tpcds/tpcds_1t_parquet_zstd"

    --database

    数据库名称
    value示例:tpcds_1t_parquet_zstd

  2. 结果检查。建表成功后可以在hive catalog下搜索到对应的库,例如:tpcds_1g_parquet_zstd。示例如下。

获取表统计信息

  1. 示例代码。推荐使用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" 
    
  2. 结果检查。任务成功运行后可以在catalog中Table properties里看到相关分析统计信息。示例如下。

步骤二:执行 TPC-DS 查询数据

  1. 示例代码。

    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测试报告结果存储的路径前缀
    value示例:tos://bucket-name/tpcds/results/TPCDS-REPORT

    --database

    数据库名称
    value示例:tpcds_1t_parquet_zstd

    --rounds

    测试轮次
    value示例:3

    --sqls

    自定义指定多个sql,用&分割,不设置默认跑全部sql。
    value示例:q1.sql&q3.sql

  2. 结果检查。在--resultFilePrefix参数指定的路径下查看测试结果,示例如下。
    Image

最近更新时间:2026.03.27 11:13:23
这个页面对您有帮助吗?
有用
有用
无用
无用