1. 絮絮叨叨
- 上一篇博客(选择TPC-H作为Presto性能测试的benchmark),讲到了选择TPC-H作为Presto性能的测试的benchmark
- 通过了解TPC-H数据集的生成过程,需要通过Hive的
LOAD DATA LOCAL INPATH
命令将生成的TPC-H数据集导入textfile
格式的Hive表中
1.1 如何创建orc格式的Hive表?
- 而性能测试需要的是
orc
格式的Hive表,因此还需要将textfile
格式转为orc格式 - 自己对Hive表之间的格式转换,不是特别了解,网上查阅到的自认为 “简单” 的方法:
- 创建同等schema的、orc格式的Hive表
- 将textfile格式的Hive表中的数据,通过
INSERT INTO TABLE
导入orc格式的表中 - 参考博客:Hive(31):将txt数据导入ORC格式表
2. 生成TPC-H的数据集
- TPC-H的数据集的生成,由 tpc-h-tools负责完成
- 从这一part开始,后面的操作都是基于linux系统的
2.1 tpc-h-tools的下载
- tpc-h-tools,可以从TPC的官网下载
- 进入链接指向的Downloads页面后,选择TPC-H对应的tools进行下载
- 下载时,需要填写自己的个人信息、邮箱,TPC会将在链接发送到指定的邮箱
- 如果记得没错的话,这个链接地址好像只能下载一次,而且下载速度十分缓慢,经常需要失败重试
- 所以,在这里提供自己2022年5月下载的当时最新的tools云盘链接, 密码: cfu0
2.2 编译tools的代码
-
将下载好的tools源码上传到一台安装了gcc的linux服务器上,可以通过
gcc -v
查看linu系统是否安装了gcc -
解压缩tools.zip文件,得到
tpc-h_tools_v3.0.0
文件夹unzip tpc-h-tool.zip
-
进入dbgen目录,创建makefile
cd tpc-h_tools_v3.0.0/dbgen cp makefile.suite makefile
-
编辑makefile文件,找到如下内容,设置对应的值
################ ## CHANGE NAME OF ANSI COMPILER HERE ################ CC = gcc # Current values for DATABASE are: INFORMIX, DB2, TDAT (Teradata) SQLSERVER, SYBASE, ORACLE, VECTORWISE # Current values for MACHINE are: ATT, DOS, HP, IBM, ICL, MVS, # SGI, SUN, U2200, VMS, LINUX, WIN32 # Current values for WORKLOAD are: TPCH DATABASE= HIVE MACHINE = LINUX WORKLOAD = TPCH
-
其中HIVE类型的DATABASE不存在,需要在
tpcd.h
文件中进行设置,在#ifdef ORACLE
之前添加如下内容:#ifdef HIVE #define GEN_QUERY_PLAN "explain;" #define START_TRAN "start transaction;\n" #define END_TRAN "commit;\n" #define SET_OUTPUT "" #define SET_ROWCOUNT "limit %d;\m" #define SET_DBASE "use %s;\n" #endif
-
然后使用make命令编译tools源码
make -f makefile
-
本人的编译过程,有一些warning提示,但不影响整体使用
-
最终,会在
dbgen/
目录下,生成dbgen
和qgen
两个可执行文件 -
dbgen
和qgen
的详细介绍,可以读 dbgen/目录下的README
文件
2.3 关于dbgen和qgen
dbgen
- dbgen是一个用于TPC-H基准测试的数据库填充程序,通过dbgen可以在
dbgen/
目录生成TPC-H所需的8个ascii数据源文件 - 每个数据源文件以
<table>.tbl
命名,例如,customer.tbl
对应customer表的数据 - 这些数据之间没使用
|
作为默认分隔符,可以修改dss.h
文件里面的#define SEPARATOR '|'
来指定其他分隔符 - 生成的数据集,默认Scale Factor为1,表示生成约1GB的数据
- TPC-H支持的scale factor有:1、10、100、300、1000、3000、10000、30000、100000
- 数据集的大小,不是一定成正比的,一般会比期望值小。
- 例如,选择1000作为scale factor,生成的表都没有1000GB的,最大的才700多GB
qgen
- 从
README
文件的介绍来看,qgen是一个用于TPC-H benchmark的查询生成程序 - 笔者发现在编译tools的源代码前,
dbgen/queries/
目录中,已经存在了TPC-H 对应的22个SQL - 所以,到目前为止,笔者尚未体会到qgen的用途,如有新的收获,会再次更新
2.4 后台作业,生成数据集
-
通过对dbgen的介绍可知,选择不同的scale factor,可以生成不同size的数据集
-
不管选择什么scale factor,一定要保证自己的磁盘有足够的存储空间 !
-
笔者选择1000作为scale factor,由于与服务的远程连接过段时间关闭,所以选择使用
nohup
创建后台作业,以成功生成对应的数据集nohup bash -c "./dbgen -s 1000 -f" > dbgen.log 2>&1 &
-
数据生成任务,执行完成后,查看dbgen.log未发现任何报错信息
-
最终,生成的
.tbl
的数据如下:
3. 导入数据到Hive表
3.1 创建Hive表
-
在
dbgen/dss.ddl
文件中,已经存在创建表的SQL语句,但是其不符合Hive SQL的语法规范,需要改写为Hive SQL -
创建数Hive据库
CREATE DATABASE tpch_1000x_orc;
-
在Hive数据库中创建表
USE tpch_1000x_orc;