本文中含有需要您注意的重要提示信息,忽略该信息可能对您的业务造成影响,请务必仔细阅读。
本文介绍如何使用TPC-DS进行测试DDI引擎性能,给出推荐的实践步骤。
前提条件
通过主账号登录阿里云 Databricks控制台,当前 TPC-DS 测试流程已在 Databricks Runtime 9.1 以上版本做验证,请选择DBR9及以上版本产品。
为保证测试效果,推荐最小测试数据量应为1T,故需创建特定规模的集群,创建步骤请参见创建集群,推荐集群规模如下:
ECS实例类型
vCore
vMem
系统盘/数据盘
实例个数
Master
16 cores
64GB
200GB/500GB
1
Worker
32 cores
128GB
200GB/500GB
6
元数据选择类型建议使用数据湖元数据,该方式采用阿里云数据湖构建(Data Lake Formation)作为统一元数据存储,采用服务化高可用的元数据,实现了多引擎统一元数据存储。
已使用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测试项目
本文的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引擎性能上的优势。