探索Spark SQL的性能:利用TPC-DS工作负载测试
Apache Spark是一个广泛使用的分布式数据处理引擎,以其速度、易用性和高级分析功能而闻名,提供了Java、Scala、Python、R和SQL等多种API。其统一的优化引擎旨在以最小化磁盘I/O和CPU使用为原则,计算出执行工作负载的最佳方式。
本开源项目特别关注Spark SQL的性能评估,并使用了行业标准决策支持基准——TPC-DS进行测试。TPC-DS是一种衡量数据处理引擎性能的广泛应用标准,通过它,我们可以了解Spark在处理数据仓库应用需求方面的准备程度。Apache Spark v2.0完全支持TPC-DS基准中的九十九个决策支持查询。
本代码模式旨在帮助Spark开发者快速设置并运行TPC-DS基准,以便在自己的开发环境中进行测试。
完成此代码模式后,读者将理解以下内容:
- 如何设置TPC-DS工具包
- 如何生成不同规模因子的TPC-DS数据集
- 如何创建Spark数据库对象
- 如何在本地模式下运行TPC-DS基准查询并查看结果
- 扩大数据规模并在Spark集群上运行时要考虑的因素
工作流程
- 命令行:
- 使用预先生成的数据集创建Spark表。
- 运行全部或部分查询,监控结果。
- 笔记本:
- 使用预先生成的数据集创建Spark表。
- 运行全部查询集或单个查询。
- 查看查询结果或性能概览。
- 查看性能图表。
包含组件
- Apache Spark:一个开放源码、快速且通用的集群计算系统
- Jupyter Notebook:一个允许您创建和分享包含活代码、公式、可视化和解释性文本的在线文档的开源Web应用程序。
特色技术
- 数据科学:系统和科学研究方法用于分析结构化和非结构化数据,提取知识和洞察。
- 人工智能:人工智能可以应用于不同的解决方案空间,实现颠覆性的技术。
- Python:一种编程语言,让您工作更快,更有效地集成您的系统。
实施步骤
有两种运行方式:
- 通过简单的交互式命令行shell脚本运行。
- 在Watson Studio中通过Jupyter笔记本运行。(参见“通过Watson Studio运行Jupyter笔记本”部分)
1. 克隆仓库
在终端中运行以下命令,将spark-tpc-ds-performance-test
仓库克隆到本地:
$ git clone https://github.com/IBM/spark-tpc-ds-performance-test
2. 设置开发工具(可选)
由于许可限制,TPCDS工具包未作为此代码模式的一部分提供。相反,这里包含了1GB规模因子的预生成数据集。如果您想使用更大规模因子的数据集,或者探索学习完整的TPCDS生命周期,可以从TPC-DS下载工具包,并在开发环境中编译。
确保你的平台上已安装所需的开发工具。这个代码模式仅支持Mac和Linux平台。根据您的平台,运行以下命令来安装必要的开发工具:
- Ubuntu:
$ sudo apt-get install gcc make flex bison byacc git
- CentOS/RHEL:
$ sudo yum install gcc make flex bison byacc git
- MacOS:
$ xcode-select --install
为了编译工具包,你需要做以下事情:
- 解压缩下载的TPC-DS zip文件。
- 切换到
<tpc-ds-toolkit-version>/tools
目录。 - 清除构建环境。
- 根据您的平台编译。
cd <tpc-ds-toolkit-version>/tools
make clean
make OS=<platform>
3. 安装Spark
要成功运行TPC-DS测试,Spark必须已安装并预先配置为与Apache Hive元存储一起工作。
完成以下选项之一,以确保Spark正确安装和配置。完成后,修改bin/tpcdsenv.sh
,将SPARK_HOME
指向您的Spark安装目录。
-
选项1 - 如果您已经安装了Spark,请检查您的Spark版本是否正确配置:
$ cd $SPARK_HOME $ bin/spark-shell // 在scala提示符处输入以下命令 scala> spark.conf scale> spark.conf.get("spark.sql.catalogImplementation") res5: String = hive scala> <ctrl-c>
如果返回的是
String = hive
,那么您的安装是正确的。 -
选项2 - 如果您没有安装Spark,或者当前安装不正确,建议从Spark 下载页面下载版本2.2.0。此版本应配置为与Apache Hive兼容,但请按照前面的选项检查。
-
选项3 - 如果您没有Spark,或者想要自己构建,首先克隆Spark仓库:
$ git clone https://github.com/apache/spark.git
然后按照这些指南进行构建。请注意,构建Spark时需要包含Hive和支持JDBC。
4. 运行脚本
确保bin/tpcdsenv.sh
脚本中的SPARK_HOME
设置正确。
现在Spark已设置好,TPC-DS脚本下载完毕,我们可以通过bin/tpcdsspark.sh
实用程序脚本来设置并开始运行TPC-DS查询。该驱动程序脚本允许您编译TPC-DS工具包,生成数据和查询,然后收集结果。
运行脚本并选择相应的选项:
$ cd spark-tpc-ds-performance-test
$ bin/tpcdsspark.sh
==============================================
TPC-DS On Spark 菜单
----------------------------------------------
设置
(1) 创建Spark表格
运行
(2) 运行TPC-DS查询子集
(3) 运行所有(99)TPC-DS查询
清理
(4) 清理
(Q) 退出
----------------------------------------------
请输入您的选择,后面跟上[回车]:
设置选项:“(1) - 创建Spark表格”
此选项会基于TPCDS_DBNAME
变量(默认为TPCDS
,但可更改)创建数据库名称。创建的表基于预生成的数据,并使用parquet格式,以提高处理效率。SQL语句用于创建表格,可以在src/ddl/individual
中找到。
运行选项:“(2) - 运行TPC-DS查询子集”
在这里,您可以指定逗号分隔的查询列表。每个查询的结果都会在TPCDS_WORK_DIR
中生成,默认目录位置为work
。结果文件的格式与原始文档中的描述相同。
当选择此选项时,示例输出如下:
==============================================
TPC-DS On Spark 菜单
----------------------------------------------
设置
(1) 创建Spark表格
运行
(2) 运行TPC-DS查询子集
(3) 运行所有(99)TPC-DS查询
清理
(4) 清理
(Q) 退出
----------------------------------------------
请输入您的选择,后面跟上[回车]: 1
----------------------------------------------
INFO: 正在创建表格。这可能需要几分钟...
INFO: 进度:[########################################] 100%
INFO: Spark表格创建成功。
按任意键继续
项目特点:
- 易用性 - 提供简单易用的命令行界面和Jupyter Notebook,便于设置和执行测试。
- 灵活性 - 支持选择运行特定查询或整个查询集。
- 可扩展性 - 可轻松调整数据规模,适应大规模数据处理的需求。
- 全面性 - 通过TPC-DS基准测试,涵盖数据处理引擎的关键性能指标。
对于希望深入了解Spark SQL性能,并在实际场景中优化数据仓库应用的开发者来说,这是一个不可多得的资源。立即尝试此项目,开始您的性能测试之旅吧!