最近由于工作要求,需要对Hive进行一下测试。在一篇论文中看到使用TCP-H,上网查了一下还算是比较靠谱的一个基准测试程序,所以决定拿来一试。网上关于这方面的博客貌似很少(能力有限,没找到很多),通过自己摸索,写下这个东东,共享之,也希望同样关注这个方面的人能够共同讨论。
系统环境:
6个结点,ubuntu01为master结点,ubuntu02-ubuntu06为slave结点
Ubuntu 12.04 LTS
Hadoop-1.2.1
Hive-0.13.1
tpch_2_14_3
一、安装配置
1、下载TPC-H源码tpch_2_14_3.zip,用来生成测试数据
网址:http://www.tpc.org/tpch/default.asp
2、将TPC-H压缩包解压,本文中解压目录为:/opt/
命令:ubuntu@ubuntu01:~$ unzip tpch_2_14_3.zip -C /opt/
3、进入tpch目录下的dbgen子目录下,将makefile.suite文件拷贝为makefile,并对makefile进行修改
命令:ubuntu@ubuntu01:/opt/dbgen$ cp makefile.suite makefile
命令:ubuntu@ubuntu01:/opt/dbgen$ gedit makefile
在makefile文件中的相应行进行如下修改:CC = gcc
# Current values for DATABASE are: INFORMIX, DB2, TDAT (Teradata)
# SQLSERVER, SYBASE
# Current values for MACHINE are: ATT, DOS, HP, IBM, ICL, MVS,
# SGI, SUN, U2200, VMS, LINUX, WIN32
# Current values for WORKLOAD are: TPCH
DATABASE= SQLSERVER
MACHINE = LINUX
WORKLOAD = TPCH
4、修改dbgen文件夹下的tpcd.h文件
修改其中的SQLSERVER段:
#ifdef SQLSERVER
#define GEN_QUERY_PLAN "EXPLAIN;"
#define START_TRAN "START TRANSACTION;\n"
#define END_TRAN "COMMIT;\n"
#define SET_OUTPUT ""
#define SET_ROWCOUNT "limit %d;\n"
#define SET_DBASE "use %s;\n"
#endif
5、执行makefile
命令:ubuntu@ubuntu01:/opt/dbgen$ make
6、生成需要用的数据
命令:ubuntu@ubuntu01:/opt/dbgen$ ./dbgen -s 1
说明:-s 代表数据规模因子,1 代表产生1G的数据量
在当前文件夹下生成的8个.tbl文件就是我们所需要的数据。
二、测试
在hive上建8个表 ( 由于hive自带的脚本dbgen/dss.ddl和hive的语法不符,所以不能直接用这个脚本建表,如果对hive语法熟练的话可以直接对其进行修改,另存为dss.ddl.hive文件 )。在此介绍另外一种方法建表。
下载最新的TPC-H_on_Hive命令包
网址:https://issues.apache.org/jira/browse/HIVE-600
解压后,将之前生成的8个表 ( 即.tbl文件) 放在data目录下
现在可以先对tpch目录下的命令试着执行一下
命令:ubuntu@ubuntu01:~$ hive -f /opt/TPC-H_on_Hive/tpch/q1_pricing_summary_report.hive
到现在为止,已经可以成功执行测试程序了,但进入hive查看表项会发现,表中没有数据。这是因为执行上一条命令,会创建相关的数据表,但还没有往数据表中导入数据。现在,就要把之前生成的数据导入到创建好的8个表中。表和数据文件是一一对应的,按名字就能区分出来。
命令: ubuntu@ubuntu01:~$ hive
命令: hive > LOAD DATA LOCAL INPATH '/opt/TPC-H_on_Hive/data/customer.tbl' INTO TABLE customer ;
这只是对customer这个表加载了数据,剩下的7个表也用同样的方法加载。
万事具备,只欠东风。下面就可以测试啦。
命令:ubuntu@ubuntu01:~$ hive -f /opt/TPC-H_on_Hive/tpch/q1_pricing_summary_report.hive
------------------------分割线-----------------------
以上呢,是我自己摸索的方法,但是偶然看到TPC-H_on_Hive/data目录下有个tpch_prepare_data.sh文件,执行这个文件可以在HDFS上建立每个表的目录,然后加载数据就行啦,不过我还没试,有兴趣的话可以试试这个,应该不会像第一种方法那样走弯路。
三、总结
做完这个测试后,感觉对TPC-H benchmark和hive稍微有了点了解,不再是一头雾水了。亲手实践一遍还是有好处滴,“纸上得来终觉浅,绝知此事要躬行”嘛,好了,不多说了,就写到这,不足的地方还请批评指正,工作去啦。