TPC-DS工具介绍及性能测试
一. 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工具介绍及性能测试的更多相关文章
- python模块介绍- multi-mechanize 性能测试工具
python模块介绍- multi-mechanize 性能测试工具 2013-09-13 磁针石 #承接软件自动化实施与培训等gtalk:ouyangchongwu#gmail.comqq 3739 ...
- [原创]H5前端性能测试工具介绍
[原创H5前端性能测试工具介绍 一 网络抓包工具 网络抓包工具选择原则,可以捕获网络请求,抓取具体请求信息流,同时可以针对网络请包进行修改或拦截: 1.Fiddler(推荐) 2.Charles(推荐 ...
- [原创]Linux下网络性能测试Netperf工具介绍及安装
[原创]Linux下网络性能测试Netperf工具介绍及安装 1 官方网站 http://www.netperf.org/netperf/ 2 Netperf介绍 Netperf是一种网络性能的测试工 ...
- Android系统性能调优工具介绍
http://blog.csdn.net/innost/article/details/9008691 经作者授权,发表Tieto某青年牛的一篇<程序员>大作. Android系统性能调优 ...
- Android性能分析工具介绍
1. Android系统性能调优工具介绍 http://blog.csdn.net/innost/article/details/9008691 TraceviewSystraceOprofile 2 ...
- python接口自动化(四)--接口测试工具介绍(详解)
简介 “工欲善其事必先利其器”,通过前边几篇文章的介绍,大家大致对接口有了进一步的认识.那么接下来让我们看看接口测试的工具有哪些. 目前,市场上有很多支持接口测试的工具.利用工具进行接口测试,能够提供 ...
- JMeter软件测试工具介绍及基本安装教程
一.工具介绍 (一)简介 Apache JMeter是Apache组织开发的基于Java的压力测试工具.用于对软件做压力测试,它最初被设计用于Web应用测试,但后来扩展到其他测试领域. 它可以用于测试 ...
- 常用的HTTP服务压测工具介绍
常用的HTTP服务压测工具介绍 在项目正式上线之前,我们通常需要通过压测来评估当前系统能够支撑的请求量.排查可能存在的隐藏bug,同时了解了程序的实际处理能力能够帮我们更好的匹配项目的实际需求,节约资 ...
- 《连载 | 物联网框架ServerSuperIO教程》- 14.配制工具介绍,以及设备驱动、视图驱动、服务实例的挂载
注:ServerSuperIO二次开发套件授权码申请---截止到:2016-12-09 1.C#跨平台物联网通讯框架ServerSuperIO(SSIO)介绍 <连载 | 物联网框架Server ...
- json、javaBean、xml互转的几种工具介绍
json.javaBean.xml互转的几种工具介绍 转载至:http://blog.csdn.net/sdyy321/article/details/7024236 工作中经常要用到Json.Jav ...
随机推荐
- Android13冻结进程分析:如何提高设备性能和用户体验
Android13冻结进程分析:如何提高设备性能和用户体验 本文介绍了Android13中的冻结进程功能,它是一种重要的资源管理策略,可以提高系统性能和稳定性,同时最大限度地节省设备的资源和电池消耗. ...
- 【Unity3D】激光雷达特效
1 由深度纹理重构世界坐标 屏幕深度和法线纹理简介中对深度和法线纹理的来源.使用及推导过程进行了讲解,本文将介绍使用深度纹理重构世界坐标的方法,并使用重构后的世界坐标模拟激光雷达特效. 本文完 ...
- 【pytorch】目标检测:新手也能彻底搞懂的YOLOv5详解
YOLOv5是Glenn Jocher等人研发,它是Ultralytics公司的开源项目.YOLOv5根据参数量分为了n.s.m.l.x五种类型,其参数量依次上升,当然了其效果也是越来越好.从2020 ...
- 问题排查:nginx的反向代理感觉失效了一样
背景 最近,负责基础设施的同事,要对一批测试环境机器进行回收,回收就涉及到应用迁移,问题是整个过程一团乱.比如服务器A上一堆应用要调用服务器B上一堆服务,结果服务器B被回收了,然后服务器A上一堆应用报 ...
- 关于API数据接口获取商品的数据的说明
获取商品数据已经成为许多应用程序的重要组成部分.为了实现这一目标,许多公司和技术开发者使用API数据接口来获取相关数据.本文将详细介绍如何使用API数据接口获取商品数据,并使用Python作为编程 ...
- 【爬虫实战】用python爬豆瓣电影《热烈》短评
目录 一.爬虫对象-豆瓣电影短评 二.爬取结果 三.爬虫代码讲解 三.演示视频 四.获取完整源码 一.爬虫对象-豆瓣电影短评 您好!我是@马哥python说,一名10年程序猿. 今天分享一期爬虫案例, ...
- 如何成功将 API 客户的 transformer 模型推理速度加快 100 倍
Transformers 已成为世界各地数据科学家用以探索最先进 NLP 模型.构建新 NLP 模块的默认库.它拥有超过 5000 个预训练和微调的模型,支持 250 多种语言,任君取用.无论你使用哪 ...
- 「codeforces - 1621G」Weighted Increasing Subsequences
link. 一个 dp(拜谢 ly)和切入点都略有不同的做法,并不需要观察啥性质. 原问题针对子序列进行规划,自然地想到转而对前缀进行规划.接下来我们考虑一个前缀 \([1, i]\) 以及一个 \( ...
- Sunshine on my shoulders
https://music.163.com/#/song?id=1477706 Sunshine on my shoulders makes me happy照在我肩上的阳光让我欢乐Sunshine ...
- 报错Intel MKL FATAL ERROR: Cannot load libmkl_core.so.的一种解决方法
问题 今天上80服务器跑mdistiller的代码时,意外发现torch.numpy都不能用了T_T 以torch为例,出现如下报错情况 以numpy为例,出现如下报错情况 我们先看看报错信息,这个报 ...