所有文章

Spark - 性能测试

本文介绍一种测试 Spark 性能的方法,也可以用来测试 Spark SQL 模块对 SQL 语句的覆盖率,主要用 TPC-DS 这个工具,希望可以帮到一些同学。

什么是 TPC-DS

  1. TPC-DS 是事务性能管理委员会 (TPC) 发布的大数据测试基准
  2. 它可以生成 99 个测试案例,遵循 SQL’99 和 SQL 2003 的语法标准,SQL 案例比较复杂
  3. 分析的数据量大,并且测试案例是在回答真实的商业问题
  4. 测试案例中包含各种业务模型(如分析报告型,迭代式的联机分析型,数据挖掘型等)
  5. 几乎所有的测试案例都有很高的 IO 负载和 CPU 计算需求
  6. 它有常用的两个功能:
    • 按指定规模生成测试数据
    • 按指定的 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

参考

  1. Spark Thrift Server官方介绍
  2. Spark Thrift Server使用与配置

编写日期:2017-02-26