APP下载

将TPC-DS工具合入HiBench测试框架的方法

2019-01-08刘建鹏刘尧

数字技术与应用 2019年10期
关键词:性能测试

刘建鹏 刘尧

摘要:TPC-DS是事务性能管理委员会(TPC)组织发布的一种数据库评测基准,其中共包含99种查询语句,涵盖各种复杂的SQL应用,与真实数据一致。但是执行时生成数据、生成查询语句、执行语句都需要手动操作,使用起来较为不方便。本文介绍一种将TPC-DS工具合入HiBench测试框架的方法。

关键词:TPC-DS;HiBench;性能测试

中图分类号:TP311 文献标识码:A 文章编号:1007-9416(2019)10-0064-02

HiBench是一个大数据性能测试套件,可以用来测试一个Hadoop集群对于各种常见任务的处理速度。可以对MapReduce、Spark、Flink、Hdfs等组件进行性能测试,支持的负载包括文件读写、图处理、机器学习、数据库操作等类型。但是HiBench提供的SQL类执行语句较少,主要是Join、Aggregation操作。而TPC-DS工具包含了大量的SQL语句,但并没有提供便捷的使用方法。因此我们结合两种测试工具,将TPC-DS合入HiBench框架进行执行。

1 HiBench框架介绍

以HiBench5.0版本为例,根目录下有四个目录,分别是src、bin、conf、workloads。src目录存放待执行负载的源代码,编译后生成jar包;conf目录存放大部分的配置,如数据规模、大数据组件的路径、集群节点数等;workloads目录存放各个负载的执行入口;bin目录存放一些控制负载执行的脚本,如读取配置、启动任务、展示进度、记录结果等。

以使用mapreduce执行bayes作业为例,工具的执行流程如下:首先使用mvn clean package命令编译整个HiBench工具;然后编辑conf/99-user_defined_properties.conf文件,配置关键参数,如hibench.scale.profile表示数据规模、hibench.hadoop.home表示Hadoop的安装路径、hibench.hadoop.executable记录hadoop命令的执行位置;再分别运行workloads/bayes/prepare/prepare.sh和 workloads/bayes/mapreduce/bin/run.sh来生成数据文件和启动负载;等待任务执行结束后,可以通过查看生成的report/hibench.report文件查看作业执行的时间及集群的吞吐量等结果。

2 加入TPC-DS的方法

首先需要增加执行入口。以hive作计算引擎为例,需要增加workloads/tpcds/hive/bin/run.sh文件,主要内容如下:

……

show_banner start

CRT_SQL=${SQL_GEN}/create_tb.sql

create_tpcds_tb ${CRT_SQL}

execute_tpcds_query sparksql

show_bannar finish

leave_bench

……

其中${SQL_GEN}為存放TPC-DS创建表语句文件的路径。

然后在bin/function/workload-functions.sh文件中增加如下函数:

function prepare_tpcds_data(){

sql_scale=$1

cd ${SQL_GEN}

parallel=10

for ((i=1;i<=$parallel;i++))

do

${SQL_GEN}/dsdgen -scale $sql_scale -dir ${SQL_DATA_DIR} -parallel $parallel -child $i 2>/dev/null 1>&2 &

done

wait

tbs=(dbgen_version customer_address customer_ demographics date_dim warehouse ship_mode time_dim reason income_band item store call_center customer web_site store_returns household_demographics web_page promotion catalog_page inventory catalog_returns web_returns web_sales catalog_sales store_sales)

for table in ${tbs[@]}

do

$HADOOP_EXECUTABLE fs -mkdir -p ${OUTPUT_HDFS}/$table 2>/dev/null

$HADOOP_EXECUTABLE fs -rm -r -skipTrash ${OUTPUT_HDFS}/$table/*.dat 2>/dev/null

$HADOOP_EXECUTABLE fs -put ${SQL_DATA_DIR}/${table}*.dat ${OUTPUT_HDFS}/$table 2>/dev/null

done

}

function create_tpcds_tb(){

create_sql_file=$1

rm -f ${create_sql_file}

sed “s#\${TPCDS_DB}#${TPCDS_DB}#g” ${SQL_GEN}/create_tb_template.tpl >> ${create_sql_file}

CMD=“${LOADDATA_EXECUTABLE} -f ${create_sql_file}”

execute_withlog $CMD

}

function execute_tpcds_query(){

exec_type=$1

cd ${SQL_GEN}

CUR_WORKLOAD_TMP=${TPCDS_DB}

for query in ${QUERY_SQL_LIST}

do

${SQL_GEN}/dsqgen -TEMPLATE $query -directory ${SQL_GEN}/query_new -dialect ${exec_type} -scale ${DATASIZE} -output_dir ${W_S_FOLDER}

sed “1 iuse ${TPCDS_DB};” -i ${W_S_FOLDER}/query_0.sql

mv ${W_S_FOLDER}/query_0.sql ${W_S_FOLDER}/${query}.sql

local CUR_WORKLOAD=${CUR_WORKLOAD_TMP}_${query}

echo “execting ${query}”

START_TIME=`timestamp`

CMD=“ ${LOADDATA_EXECUTABLE} -f ${W_S_FOLDER}/${query}.sql”

execute_withlog $CMD

END_TIME=`timestamp`

mv ${W_S_FOLDER}/bench.log ${W_S_FOLDER}/${query}.log

gen_report ${START_TIME} ${END_TIME} 0

}

以上prepare_tpcds_data函數用于生成TPC-DS工具使用的数据并将其传至HDFS的相应目录;create_tpcds_tb函数用于执行建表语句,将HDFS数据目录与外表关联起来;execute_tpcds_query函数用于执行SQL语句的操作,其中${QUERY_SQL_LIST}为所有需要执行查询的名称列表。每次做查询时,会使用dsqgen程序生成一个查询文件供计算引擎使用;SQL语句执行完成后,将执行结果放于report目录下以供查阅,最后通过gen_report函数生成性能结果。

至此,只要于conf目录下配置相应的变量即可实现TPC-DS工具的自动化执行。

猜你喜欢

性能测试
基于LoadRunner的网络仓库系统性能测试及优化
自动扶梯主驱动链条性能测试分析与润滑保养
车联网专用短程通信技术
关于聚羧酸系减水剂的性能论述