Spark - 性能测试
本文介绍一种测试 Spark 性能的方法,也可以用来测试 Spark SQL 模块对 SQL 语句的覆盖率,主要用 TPC-DS 这个工具,希望可以帮到一些同学。
什么是 TPC-DS
- TPC-DS 是事务性能管理委员会 (TPC) 发布的大数据测试基准
- 它可以生成 99 个测试案例,遵循 SQL’99 和 SQL 2003 的语法标准,SQL 案例比较复杂
- 分析的数据量大,并且测试案例是在回答真实的商业问题
- 测试案例中包含各种业务模型(如分析报告型,迭代式的联机分析型,数据挖掘型等)
- 几乎所有的测试案例都有很高的 IO 负载和 CPU 计算需求
- 它有常用的两个功能:
- 按指定规模生成测试数据
- 按指定的 SQL 标准生成测试用的 99 条 SQL 语句
- 按指定规模生成测试数据
基本原理
首先用 TPC-DS 生成测试数据与 99 条 SQL 语句,然后将数据导入 Hive,配置 Spark 使其能够访问到 Hive 元数据,这时启用 Spark 自身的 spark thrift server 服务,如果没有了解过,可以参考这里,向这个 Server 发送 SQL 语句,最后获取其执行时间并记录下来。
生成数据与sql语句
下载最新版 tpc-ds-tool.zip, 放在 /root/modules 目录下,官网地址:www.tpc.org
解压并得到一个目录 v2.1.0:
cd /root/modules
unzip tpc-ds-tool.zip
编译
sudo yum install –y gcc
cd /root/modules/v2.1.0/tools/
make
生成测试数据:
./dsdgen -scale 100 -dir /root/modules/data100/
命令意思是在 /root/modules/data100/
目录下生成规模为 100G 的测试数据 完成后会在 /root/modules/data100/
目录下生成 25 个文件。
将生成的 25 个数据文件加载到对应的 Hive 表中, 以 call_center 表为例, 命令如下:
hive> load data local inpath "/root/modules/data100/call_center.dat" overwrite into table call_center.dbgen_version;
修改 SQL 模板文件:
cd /root/modules/v2.1.0/query_templates
for i in {1..99}; do sed -i '1s/^/define _END = "";\n/' query$i.tpl; done
成生 SQL 语句:
mkdri -p /data/sql_100g
for i in {1..99};
do
echo query$i.tpl > ../query_templates/tpl.lst
./dsqgen -directory ../query_templates –template ../query_templates/query1.tpl -dialect netezza -scale 100 -output_dir /data/tpc-ds/sql_100g/ -input ../query_templates/tpl.lst
mv /data/tpc-ds/sql_100g/query_0.sql /data/tpc-ds/sql_100g/query_$i.sql
done
在每条测试 SQL 语句前添加数据库名
cd /data/sql_100g
for i in {1..99}; do sed -i '1s/^/use leap_text_100g;\n/' query_$i.sql; done
运行测试 SQL 并保存测试结果
cd $SPARK_HOME
for i in `seq 1 99`
do
bin/beeline -u "jdbc:hive2://host1.kxdmmr.com:10016/default;httpPath=cliservice;transportMode=http" -f /data/tpc-ds/sql_100gquery_$i.sql
echo -e "$i\t$?" >> leap_text_100g.tsv
done