一. Hive-testbench工具介绍

TPC-DS:https://www.cnblogs.com/webDepOfQWS/p/10544528.html

由于原生态工具生产测试数据表存在bug,后续引进hive-testbench,可参考:
https://bbs.huaweicloud.com/blogs/260840

可在WPS共享文档https://yundoc.fin-shine.com/drive/group/442074/3256599

或10.141.23.16 /home/appuser/hive-testbench下载 (配置项及脚本已修改)

1.1. 工具部署

执行tpcds-build.sh

(该工具需依赖包,执行后会提示,缺少什么安装什么依赖包)
一般需要这几个:yum -y install gcc gcc-c++

也可参考https://bbs.huaweicloud.com/blogs/260840

1.2. 脚本修改适配

修改脚本,直接使用hive(WSL环境没有配置beeline)
文件: tpcds-setup.sh

echo "TPC-DS text data generation complete."

#HIVE="beeline -n hive -u 'jdbc:hive2://localhost:2181/;serviceDiscoveryMode=zooKeeper;zooKeeperNamespace=hiveserver2?tez.queue.name=default'

"HIVE="hive"

# Create the text/flat tables as external tables. These will be later be converted to ORCFile.

修改不支持的参数,注释 hive.optimize.sort.dynamic.partition.threshold

vim settings/init.sql

vim settings/load-flat.sql

vim settings/load-partitioned.sql

-- set hive.optimize.sort.dynamic.partition.threshold=0;

(目前发现仅在Cloudera中提供该配置:
https://docs.cloudera.com/cdp-private-cloud-base/7.1.5/ozone-storing-data/topics/ozone-config-work-with-Hive.html)

1.3. 生成测试数据

例如# 生成大小100G的数据集# 生成文件放置于/tmp目录下

bash tpcds-setup.sh 100 /tmp/100

(可在HDFS上查看已生成的文件: sudo -u hdfs hadoop fs -du -h /tmp)

1.4. 执行99条SQL

路径:/hive-testbench-hdp3/sample-queries-tpcds

方法一:

执行hive命令进入数据库执行命令界面,然后执行:

hive> use tpcds_bin_partitioned_orc_100;

hive> source query12.sql;

方法二:

使用脚本批量执行,通过/tmp/tpcds_bin_partitioned_orc_100.Log查看所有执行SQL结果。

(/tmp/tpcds_calc.log便于统计每条SQL执行的耗时情况,实际以上述结果为准!)

命令:sh autoTpcDs.sh

脚本内容:(仅参考,根据实际内容修改)

#!/bin/bash

base_dir='/home/appuser/hive-testbench/hive-testbench-hdp3/sample-queries-tpcds'

DBbase=tpcds_bin_partitioned_orc_100

for sql_num in `seq 1 99`

do

if ((${sql_num}==18));then

continue 1

else

echo "=============sql_num: query${sql_num} =============="

hive -e "use ${DBbase};source ${base_dir}/query${sql_num}.sql"

echo "=============sql_num: query${sql_num} ==============" >> /tmp/tpcds_calc.log

grep 'Time taken' /tmp/${DBbase}.log|tail -1  >> /tmp/tpcds_calc.log 2>&1

fi

done  >> /tmp/${DBbase}.log 2>&1

二. TPC-DS

2.1. TPC-DS编译

yum install -y gcc gcc-c++ expect byacc flex bison

地址: git clone git@github.com:gregrahn/tpcds-kit.git

地址:git clone https://github.com/gregrahn/tpcds-kit.git

进入tool目录下

执行 make

2.2. 建表

在tools目录下 查看tpcds.sql文件,提供了基础的建表语句

2.3. 生成数据

2.3.1. 创建存放生成数据的目录

mkdir /root/tpcdsdata

2.3.2. 生成指定大小的数据到创建的目录

./tools/dsdgen -SCALE 100GB -DIR ./data_100G

-SCALE:指定生成数据量大小如:100GB、200GB、1TB、100TB

2.4. 根据模板生成查询语句

通过使用dsqgen命令根据TPC-DS提供的模板生成不同类型的SQL语句,TPC-DS默认支持以下模板:db2.tpl、netezza.tpl、oracle.tpl、sqlserver.tpl

for i in `seq 1 99`

do

  ./dsqgen  -DIRECTORY ../query_templates/ -TEMPLATE "query${i}.tpl" -DIALECT netezza -FILTER Y > ../sql/query${i}.sql

done

-DIRECTORY:SQL模板的路径。 这个是查询模板的文件目录位置 …/query_templates/注意:因为query_templates只有99个查询模板,所以最多一次只能生成99个查询语句,但是如果生成多次,生成的99个查询语句是一样

-TEMPLATE:SQL模板的名称

-DIALECT:include query dialect defintions found in < s >.tpl 。-DIALECT postgresql 是哪种数据库的查询语句

注意:DIALECT支持oracle,db2,sqlserver,netezza,ansi,但是没有postgresql。可以去query_templates文件目录下看是否有对应的模板文件,推荐netezza,pg可以解析。

-FILTER:重定向到标准输出,即…/sql/query${i}.sql 是输出路径和文件类型。

2.5. 所有表分别导入数据

举例:psql -h 172.0.0.1 -p 31000 -U zhouwh -d testdb_100g -c "\COPY catalog_returns FROM '/home/appuser/tpcds-kit/data_100g/catalog_returns.dat' with DELIMITER as '|' NULL '' SEGMENT REJECT LIMIT 10000 ROWS;"

脚本:

#数据库名称

DB=testdb_100g

#dat文件路径

addr='/home/appuser/tpcds-kit/data_100g'

now=`date +%Y%m%d%H%M%S`

cd $addr

#编辑文件

total_cost1=0

for i in `ls *.dat|cut -d '.' -f 1`

do

echo "###${i}开始编辑dat文件..."

begin_time1=`date +%s.%N`

sed -i -r 's/(.)$//g' ${addr}/${i}.dat

rcsed=$?

end_time1=`date +%s.%N`

cost1=`echo "$end_time-$begin_time"|bc`

total_cost1=`echo "$total_cost+$cost"|bc`

if [ $rcsed -ne 0 ] ; then

printf "###!%s编辑失败\n" $i

else

printf "###%s编辑成功!cost耗时::%.2f秒,累计耗时::%.2f秒\n" $i $cost1 $total_cost1

fi

done

#导入数据

total_cost=0

for i in `ls *.dat|cut -d '.' -f 1`

do

echo "${i}开始导入数据..."

begin_time=`date +%s.%N`

psql -h 172.0.0.1 -p 31000 -U zhouwh -d ${DB} -c "\COPY ${i} FROM '${addr}/${i}.dat' with DELIMITER as '|' NULL '';" 2>/tmp/null

rc=$?

end_time=`date +%s.%N`

cost=`echo "$end_time-$begin_time"|bc`

total_cost=`echo "$total_cost+$cost"|bc`

if [ $rc -ne 0 ] ; then

printf "#####!%s导入数据失败\n" $i

else

printf "######%s导入数据成功!耗时:%.2f秒,累计耗时:%.2f秒\n" $i $cost $total_cost

fi

done

执行命令:

nohup /home/appuser/tpcds-kit/exportdat.sh 2>/home/appuser/tpcds-kit/nohup.out &

2.6. 执行查询语句

#数据库名字

DB=testdb_100g

total_cost=0

now=`date +%Y%m%d%H%M%S`

for i in {1..99}

do

echo "begin run Q${i}, sql/query$i.sql , `date`"

begin_time=`date +%s.%N`

psql -h 172.0.0.1 -p 31000 -U zhouwh -d $DB -f ./query${i}.sql > ./log/log_query${i}.out 2>/tmp/null

rc=$?

end_time=`date +%s.%N`

cost=`echo "$end_time-$begin_time"|bc`

total_cost=`echo "$total_cost+$cost"|bc`

if [ $rc -ne 0 ] ; then

printf "run Q%s fail, cost: %.2f, totalCost: %.2f, `date`\n" $i $cost $total_cost

else

ROWS=`grep 'rows' ./log/log_query${i}.out|tail -1`

printf "###run Q%s succ, cost: %.2f, totalCost: %.2f, ROWS%s%s%s, `date`\n" $i $cost $total_cost $ROWS

fi

done

2.7. 统计

cost时间

awk -F "," '{print $2}' 文件名 |awk -F ":" '{print $2}'

TPC-DS工具介绍及性能测试的更多相关文章

  1. python模块介绍- multi-mechanize 性能测试工具

    python模块介绍- multi-mechanize 性能测试工具 2013-09-13 磁针石 #承接软件自动化实施与培训等gtalk:ouyangchongwu#gmail.comqq 3739 ...

  2. [原创]H5前端性能测试工具介绍

    [原创H5前端性能测试工具介绍 一 网络抓包工具 网络抓包工具选择原则,可以捕获网络请求,抓取具体请求信息流,同时可以针对网络请包进行修改或拦截: 1.Fiddler(推荐) 2.Charles(推荐 ...

  3. [原创]Linux下网络性能测试Netperf工具介绍及安装

    [原创]Linux下网络性能测试Netperf工具介绍及安装 1 官方网站 http://www.netperf.org/netperf/ 2 Netperf介绍 Netperf是一种网络性能的测试工 ...

  4. Android系统性能调优工具介绍

    http://blog.csdn.net/innost/article/details/9008691 经作者授权,发表Tieto某青年牛的一篇<程序员>大作. Android系统性能调优 ...

  5. Android性能分析工具介绍

    1. Android系统性能调优工具介绍 http://blog.csdn.net/innost/article/details/9008691 TraceviewSystraceOprofile 2 ...

  6. python接口自动化(四)--接口测试工具介绍(详解)

    简介 “工欲善其事必先利其器”,通过前边几篇文章的介绍,大家大致对接口有了进一步的认识.那么接下来让我们看看接口测试的工具有哪些. 目前,市场上有很多支持接口测试的工具.利用工具进行接口测试,能够提供 ...

  7. JMeter软件测试工具介绍及基本安装教程

    一.工具介绍 (一)简介 Apache JMeter是Apache组织开发的基于Java的压力测试工具.用于对软件做压力测试,它最初被设计用于Web应用测试,但后来扩展到其他测试领域. 它可以用于测试 ...

  8. 常用的HTTP服务压测工具介绍

    常用的HTTP服务压测工具介绍 在项目正式上线之前,我们通常需要通过压测来评估当前系统能够支撑的请求量.排查可能存在的隐藏bug,同时了解了程序的实际处理能力能够帮我们更好的匹配项目的实际需求,节约资 ...

  9. 《连载 | 物联网框架ServerSuperIO教程》- 14.配制工具介绍,以及设备驱动、视图驱动、服务实例的挂载

    注:ServerSuperIO二次开发套件授权码申请---截止到:2016-12-09 1.C#跨平台物联网通讯框架ServerSuperIO(SSIO)介绍 <连载 | 物联网框架Server ...

  10. json、javaBean、xml互转的几种工具介绍

    json.javaBean.xml互转的几种工具介绍 转载至:http://blog.csdn.net/sdyy321/article/details/7024236 工作中经常要用到Json.Jav ...

随机推荐

  1. 概率dp_C++详解

    引入 概率 DP 用于解决概率问题与期望问题,建议先对概率和期望的内容有一定了解.一般情况下,解决概率问题需要顺序循环,而解决期望问题使用逆序循环,如果定义的状态转移方程存在后效性问题,还需要用到 高 ...

  2. 定义一个类,在实例化的时候,抛出NameError异常

    代码1:class cla: def __init__(self): #raise NameError # 抛出异常 print(r) cla() 运行截图:

  3. 论文解读(MCADA)《Multicomponent Adversarial Domain Adaptation: A General Framework》

    Note:[ wechat:Y466551 | 可加勿骚扰,付费咨询 ] 论文信息 论文标题:Multicomponent Adversarial Domain Adaptation: A Gener ...

  4. 当 GPT-4 拥有了 Diff 视图,那真的是如虎添翼!

    目录 1. 当你要求 GPT-4 帮你写点代码时 2. 你需要的背景知识都在这里 2.1 关于 GoPool 和 DevChat 2.2 关于 GoPool 的工作原理 2.3 我想要让 taskQu ...

  5. 浅析 GlusterFS 与 JuiceFS 的架构异同

    在进行分布式文件存储解决方案的选型时,GlusterFS 无疑是一个不可忽视的考虑对象.作为一款开源的软件定义分布式存储解决方案,GlusterFS 能够在单个集群中支持高达 PiB 级别的数据存储. ...

  6. 了解 HarmonyOS

    引言 在开始 HarmonyOS 开发之前,了解其背景.特点和架构是非常重要的.本章将为你提供一个全面的 HarmonyOS 概览. 目录 什么是 HarmonyOS HarmonyOS 的发展历程 ...

  7. 小白python和pycharm安装大佬勿扰

    编程语言发展和Python安装 计算机语言的发展 机器语言 1946年2月14日,世界上第一台计算机ENIAC诞生,使用的是最原始的穿孔卡片.这种卡片上使用的语言是只有专家才能理解的语言,与人类语言差 ...

  8. API数据接口获取商品详情数据该怎么操作

    随着电商行业的快速发展,获取商品详情数据是电商应用的重要功能之一.为了提高用户的购物体验,开发者可以利用API接口获取商品详情数据,方便用户了解商品的具体信息和特点.在本文中,我们将介绍如何使用API ...

  9. .NET周刊【9月第1期 2023-09-03】

    国内文章 如何正确实现一个自定义 Exception https://www.cnblogs.com/kklldog/p/how-to-design-exception.html 最近在公司的项目中, ...

  10. Redis 不同插入方法的性能对比

    1. 测试目的 对比 Redis 不同插入方法(插入同时能设置过期时间)的性能区别. 2. 测试数据 key:SMGP_ value:JSON数据 { "spName":" ...