hive结合hbase数据处理解决方案测评

前言
我们考虑为什么要将hive与hbase结合,出于hbase有唯一主键的缘故可以将其作为存储,顺手能帮我们完成海量数据“去重”的etl处理,而hive能作为我们统计计算。两者结合简直就是双剑合臂~~,但效果怎么样呢?
目的
基于多种hiveSQL去重方式失败后,考虑过使用mysql做近期数据去重的方式,然而不能满足全量去重的业务需求,所以考虑使用hbase的唯一主键来达到全量“去重”的效果。
测试环境
hadoop-1.0.3
hive-0.9.0
hbase-0.94.2
zookeeper-3.3.5
1namenode,5datanode
sqoop
测试指标
1.mysql->hbase sqoop执行命令执行效率
2.hiveSQL查询统计hive&hbase表执行效率
3.hive&hbase表copy数据成hive表效率
4.hbase稳定性
测试结果
1.mysql->hbase sqoop执行命令执行效率
mysql数据条数:93559
cpu耗时:26.280s
执行耗时:91.0148s
小结:sqoop将mysql记录转化成hbase PUT对象,批量入库至hbase,效率很高,能满足要求。
2.hiveSQL查询统计hive&hbase表执行效率
数据量:1616374
sql:select count(*) from t1;
case cpu cost 执行cost
hive&hbase 10 minutes 45 seconds 728.647 seconds
hive 25 seconds 64.815 seconds

小结:统计效率很慢,远不能满足需求。
3.hive&hbase表copy数据成hive表效率
数据量:1616374
sql:insert into table t1 select * from t2;
case cpu cost 执行cost
hive&hbase->hive 12 minutes 13 seconds 1113.729 seconds
hive->hive 1 minutes 7 seconds 84.3 seconds

小结:hiveSQL copy hive&hbase表数据,其实也是mapreduce程序,需要查询hbase表,而hbase的查询效率低,直接导致mapreduce耗时长。
4.hbase稳定性
在运行过程当中,没有遇到hbase死节点的情况。
针对hive结合hbase的情形,出现过hive创建的hbase表不能删除的情况,hive表数据导入hive&hbase表执行过程中假死的现象(在执行hive scan,很慢导致)。
总结
hive&hbase表的统计计算是基于hbase,效果相当不理想,没有达到“双剑合臂”的效果,后续调整hbase参数后继续测试,见下篇。
参考文献
http://search-hadoop.com/m/xAweX1bqjoB1&subj=Re+Hbase+Hive+integration+performance+issues
http://www.cnblogs.com/imac/archive/2012/11/04/2753301.html

你可能感兴趣的:(hive,hbase)