环境信息
机器: xx.xx.xx.xx
操作路径:
/data01/tpcds/tpcds0506
目录下文件夹用途说明
data_1000g,数据存储目录,这里是1T,如果是10T,需要新建data_10000g
ddl,建表语句,脚本执行过程中会调用sql建表
DSGen-ali,工具目录,和官网tpcds包类似,里面有模版和工具造数据
logs_1000,日志目录,相关测试日志记录在这里
patches,补丁文件,对于sql的特定小问题的处理
queries,查询测试语句的目录
results,pt测试的数据结果目录
shell,新建的目录,放置了一些测试的脚本
数据生成
1. 生成pt数据
这里生成1T数据,分为10份,开启多个进程处理,
脚本路径:
/data01/tpcds/tpcds0506/DSGen-ali/gen_pt_data.sh
nohup tools/dsdgen -DIR /data01/tpcds/tpcds0506/data_1000g/pt_data/child1 -SCALE 1 -TERMINATE N -PARALLEL 10 -DISTRIBUTIONS tools/tpcds.idx -CHILD 1 -FORCE &
nohup tools/dsdgen -DIR /data01/tpcds/tpcds0506/data_1000g/pt_data/child1 -SCALE 2 -TERMINATE N -PARALLEL 10 -DISTRIBUTIONS tools/tpcds.idx -CHILD 2 -FORCE &
nohup tools/dsdgen -DIR /data01/tpcds/tpcds0506/data_1000g/pt_data/child1 -SCALE 3 -TERMINATE N -PARALLEL 10 -DISTRIBUTIONS tools/tpcds.idx -CHILD 3 -FORCE &
nohup tools/dsdgen -DIR /data01/tpcds/tpcds0506/data_1000g/pt_data/child1 -SCALE 4 -TERMINATE N -PARALLEL 10 -DISTRIBUTIONS tools/tpcds.idx -CHILD 4 -FORCE &
nohup tools/dsdgen -DIR /data01/tpcds/tpcds0506/data_1000g/pt_data/child1 -SCALE 5 -TERMINATE N -PARALLEL 10 -DISTRIBUTIONS tools/tpcds.idx -CHILD 5 -FORCE &
nohup tools/dsdgen -DIR /data01/tpcds/tpcds0506/data_1000g/pt_data/child1 -SCALE 6 -TERMINATE N -PARALLEL 10 -DISTRIBUTIONS tools/tpcds.idx -CHILD 6 -FORCE &
nohup tools/dsdgen -DIR /data01/tpcds/tpcds0506/data_1000g/pt_data/child1 -SCALE 7 -TERMINATE N -PARALLEL 10 -DISTRIBUTIONS tools/tpcds.idx -CHILD 7 -FORCE &
nohup tools/dsdgen -DIR /data01/tpcds/tpcds0506/data_1000g/pt_data/child1 -SCALE 8 -TERMINATE N -PARALLEL 10 -DISTRIBUTIONS tools/tpcds.idx -CHILD 8 -FORCE &
nohup tools/dsdgen -DIR /data01/tpcds/tpcds0506/data_1000g/pt_data/child1 -SCALE 9 -TERMINATE N -PARALLEL 10 -DISTRIBUTIONS tools/tpcds.idx -CHILD 9 -FORCE &
nohup tools/dsdgen -DIR /data01/tpcds/tpcds0506/data_1000g/pt_data/child1 -SCALE 10 -TERMINATE N -PARALLEL 10 -DISTRIBUTIONS tools/tpcds.idx -CHILD 10 -FORCE &
2. 生成mt数据
脚本路径:
/data01/tpcds/tpcds0506/DSGen-ali/tools/gen_mt_data.sh
这里执行脚本需要进入tools目录下,因为会默认在当前目录寻找tpcds.idx文件,生成pt数据的时候可以指定相对路径,这里不行
这里生成4份数据,两次测试使用
nohup sh gen_mt_data.sh 1 &
nohup sh gen_mt_data.sh 2 &
nohup sh gen_mt_data.sh 3 &
nohup sh gen_mt_data.sh 4 &
3. 生成pt查询
脚本路径:
/data01/tpcds/tpcds0506/DSGen-ali/tools/create_pt_query.sh
脚本中stream数字设置为9,生成9个大sql,一个做单独测试,另外8个分两批做并发测试
生成后的查询文件路径:
/data01/tpcds/tpcds0506/queries/pt_queries
里面有query_0-query_8,9个sql文件
生成的大sql脚本,进行拆解处理,分成一个个小sql文件,一共是9*99个文件
sh /data01/tpcds/tpcds0506/DSGen-ali/tools/create_pt_query_splite99.sh
拆解后,会在上面pt_queries路径下生成stream0-stream8,9个子查询文件夹
4. 生成mt查询
脚本路径:
/data01/tpcds/tpcds0506/DSGen-ali/tools/create_mt_query.sh
这里也是生成4份查询sql,分别对应上面生成的4份数据
数据导入
1. pt数据导入
脚本路径:
/data01/tpcds/tpcds0506/shell/data_load_pt_txt.sh
先把生成的数据导入到常规txt库
然后把数据从txt库复制到orc库,这里导入的orc库是分区的
/data01/tpcds/tpcds0506/shell/data_load_pt_orc.sh
还有个没有分区的库,后面没看到使用的地方
/data01/tpcds/tpcds0506/shell/data_load_pt_orc_nopar.sh
2. mt数据导入
mt数据导入的表,和pt导入的数据的表不是同一个表
mt数据是查询处理后再插入到pt的表中,后面mt测试才会用到
脚本路径:
/data01/tpcds/tpcds0506/shell/data_load_mt.sh
数据测试
1. pt测试
脚本路径:
/data01/tpcds/tpcds0506/shell/data_load_mt.sh/stream_queries_run.sh
这里脚本中指定了测试pt_queries/stream0下面的sql文件,做单独测试
Stream_0 run time: 13892.530 seconds
2. tt1测试
脚本路径:
/data01/tpcds/tpcds0506/shell/data_load_mt.sh/pt_stream.sh
执行命令: nohup sh pt_stream.sh 1 &
这里会并发查询pt_queries/stream1-stream4下面的sql
Stream_1 run time: 12635.997 seconds.
Stream_2 run time: 12468.474 seconds.
Stream_3 run time: 12759.545 seconds.
Stream_4 run time: 12485.486 seconds.
3. mt1测试
脚本路径:
/data01/tpcds/tpcds0506/shell/data_load_mt.sh/run_maintenance.sh
/data01/tpcds/tpcds0506/shell/data_load_mt.sh/mt_stream.sh
执行命令: nohup sh mt_stream.sh 1 &
Maintenance test 1 finished. Time token: 2:10:00, 7800.801 second
4. tt2测试
脚本路径:
/data01/tpcds/tpcds0506/shell/data_load_mt.sh/pt_stream.sh
执行命令: nohup sh pt_stream.sh 1 &
这里会并发查询pt_queries/stream5-stream8下面的sql
Stream_5 run time: 12629.399 seconds.
Stream_6 run time: 12574.020 seconds.
Stream_7 run time: 12605.455 seconds.
Stream_8 run time: 12575.210 seconds.
5. mt2测试
脚本路径:
/data01/tpcds/tpcds0506/shell/data_load_mt.sh/run_maintenance.sh
/data01/tpcds/tpcds0506/shell/data_load_mt.sh/mt_stream.sh
执行命令: nohup sh mt_stream.sh 1 &
Maintenance test 2 finished. Time token: 1:04:03, 3843.419 seconds
遇到的问题
批量删除支持
默认hive不支持批量删除,需要把表修改为事务支持,如下
ALTER TABLE tpcds_1000_orc.date_dim SET TBLPROPERTIES ('transactional'='true');
修改数据库中所有表,执行脚本
sh /data01/tpcds/tpcds0506/shell/alter_transactional.sh
HiveInputFormat查询问题
加了事务支持后,mt测试出现新的问题
Caused by: org.apache.hadoop.hive.ql.metadata.HiveException: org.apache.hadoop.hive.ql.metadata.HiveException: Unable to create RecordUpdater for HiveOutputFormat that does not implement AcidOutputFormat
修改了run_maintenance.sh脚本,hive执行命令中添加
--hiveconf "hive.input.format=org.apache.hadoop.hive.ql.io.HiveInputFormat"
说明:tt测试里面是使用spark-sql跑的,没有出现这个问题
表存储格式问题
给的标准mt查询模版中,以LF开头的表基本都是下面这种开头
CREATE table crv
USING parquet
TBLPROPERTIES("parquet.compression"="SNAPPY","transactional"="true")
问题:首先这里using parquet不支持,然后修改为STORED AS PARQUET后,建表没问题,但是hive查询不支持parquet这种格式,需要orc格式才行,因此修改后如下
CREATE table csv
TBLPROPERTIES("transactional"="true")