文档

基于TPC-DS测试Databricks引擎性能

更新时间:
一键部署
重要

本文中含有需要您注意的重要提示信息,忽略该信息可能对您的业务造成影响,请务必仔细阅读。

本文介绍如何使用TPC-DS进行测试DDI引擎性能,给出推荐的实践步骤。

前提条件

  1. 通过主账号登录阿里云 Databricks控制台,当前 TPC-DS 测试流程已在 Databricks Runtime 9.1 以上版本做验证,请选择DBR9及以上版本产品。

  2. 为保证测试效果,推荐最小测试数据量应为1T,故需创建特定规模的集群,创建步骤请参见创建集群,推荐集群规模如下:

    ECS实例类型

    vCore

    vMem

    系统盘/数据盘

    实例个数

    Master

    16 cores

    64GB

    200GB/500GB

    1

    Worker

    32 cores

    128GB

    200GB/500GB

    6

    元数据选择类型建议使用数据湖元数据,该方式采用阿里云数据湖构建(Data Lake Formation)作为统一元数据存储,采用服务化高可用的元数据,实现了多引擎统一元数据存储。

  3. 已使用OSS管理控制台创建非系统目录存储空间,详情请参见创建存储空间

    警告

    首次使用DDI产品创建的Bucket为系统目录Bucket,不建议存放数据,您需要再创建一个Bucket来读写数据。

    说明

    DDI支持免密访问OSS路径,结构为:oss://BucketName/Object

    • BucketName为您的存储空间名称;

    • Object为上传到OSS上的文件的访问路径。

    例:读取在存储空间名称为databricks-demo-hangzhou文件路径为demo/The_Sorrows_of_Young_Werther.txt的文件

    // 从oss地址读取文本文档
    val text = sc.textFile("oss://databricks-demo-hangzhou/demo/The_Sorrows_of_Young_Werther.txt")

TPC-DS项目简介

本项目基于社区的TPC-DS项目,该项目包含生成测试集数据、运行实例SQL、输出各阶段执行时间指标等功能,以此检验引擎的性能。本文的TPC-DS实现将生成数据、运行测试以及迭代循环等功能整合,统一使用一套参数,用户可以专注于测试数据与DDI引擎性能本身,屏蔽底层较繁琐的细节。

参数列表

可执行参数

参数定义

推荐值

--scaleFactor

Int型参数,测试集数据规模,单位为GB

推荐最小数据量为1T,参数为1000

--location

String类型参数,数据集与运算结果产生的OSS目录

避免系统目录bucket

--format

String类型参数,Spark数据的存储类型

数据湖元数据,参数为delta

--overwrite

Boolean型参数,是否覆盖生成数据集

推荐为true,也可根据步骤判断

--numPartitions

Int型参数,dsdgen生成数据的分区数,即输入任务数

根据数据量决定,1T数据推荐为100

--numberOfIteration

Int型参数,测试集运算执行次数

单独生成数据集时,参数为0

运行测试数据集时,参数为大于0

--generateData

Boolean型参数,是否生成数据集

单独生成数据集时,参数为true

运行测试数据集时,参数为false

其余参数较为固定,可参考以下推荐用例。

TPC-DS项目最佳实践

步骤一 :TPC-DS工程下载

  • 示例工程下载:(请联系Databricks运维)

  • 在OSS已创建的bucket中创建一个目录,存放上述下载的jar包。

步骤二 :创建TPC-DS测试项目

说明
  1. 本文的TPC-DS的实现基于TPC-DS的基准测试,并不能与已发布的TPC-DS基准测试结果相比较,本文中的测试并不符合TPC-DS的基准测试的所有要求。

在Databricks数据洞察的项目空间中创建一个新项目,操作如下:

创建项目

步骤三 :生成测试数据集脚本

  • spark资源可以根据测试数据量与集群规模配置的具体情况,进行逐一调整。

  • scale_factor参数控制整个测试集的数据量(如scale_factor=1000 即1T的数据量)。

  • 以下的OSS路径要替换为用户自己设置的路径,分别用于读取jar包和存放生成的测试数据集与性能测试结果。

执行脚本如下:

--class com.databricks.spark.sql.perf.tpcds.GenTPCDSData
--deploy-mode cluster
--name generate_dataset
--queue default
--master yarn
--conf spark.yarn.submit.waitAppCompletion=true
--conf spark.driver.cores=4
--conf spark.driver.memory=12G
--conf spark.executor.cores=7
--conf spark.executor.memory=20G
--conf spark.executor.instances=30
--conf spark.executor.memoryOverhead=2048
--conf spark.default.parallelism=600
--conf spark.shuffle.service.enabled=true
--conf spark.sql.autoBroadcastJoinThreshold=-1 
oss://tpc-ds-test/tpcds-jar/spark-sql-perf-assembly-0.5.1-SNAPSHOT.jar
--scaleFactor 1000
--location oss://tpc-ds-test
--format delta
--overwrite true
--numPartitions 100
--numberOfIteration 0
--generateData true

生成的数据集会存储在location参数所指定路径的data目录下(如上面的例子,数据集在:oss://tpc-ds-test/data)

步骤四:运行TPC-DS测试集

运行测试集的方法和生成数据的操作一致,仅需要修改下面两个参数:

  • numberOfIteration:更改为1,代表测试集将被运行1次,产生1次迭代结果,也可自行选择迭代执行次数。

  • generateData:更改为false,代表只执行测试集运算,不进行重复测试集数据生成。

执行脚本如下:

--class com.databricks.spark.sql.perf.tpcds.GenTPCDSData
--deploy-mode cluster
--name run_dataset
--queue default
--master yarn
--conf spark.yarn.submit.waitAppCompletion=true
--conf spark.driver.cores=4
--conf spark.driver.memory=12G
--conf spark.executor.cores=7
--conf spark.executor.memory=20G
--conf spark.executor.instances=30
--conf spark.executor.memoryOverhead=2048
--conf spark.default.parallelism=600
--conf spark.shuffle.service.enabled=true
--conf spark.sql.autoBroadcastJoinThreshold=-1 
oss://tpc-ds-test/tpcds-jar/spark-sql-perf-assembly-0.5.1-SNAPSHOT.jar
--scaleFactor 1000
--location oss://tpc-ds-test
--format delta
--overwrite true
--numPartitions 100
--numberOfIteration 1
--generateData false

运行完成后结果会存储在location参数所指定路径的result目录下(如上面的例子,结果在:oss://tpc-ds-test/result)

步骤五:结果分析

最终在oss://tpc-ds-test/result/timestamp=${TimeStamp}的目录下,产生一个JSON类型的结果文件,实例如下图(数值仅供参考):

测试结果示例图

可以看到针对每个SQL测试都会产生相应的指标结果项(毫秒单位),可以着重关注于executionTime,该指标区分度较大,主要体现DDI引擎性能上的优势。

  • 本页导读 (0)