前言:
由于工作中涉及数据更新操作,而hive on HDFS 实现更新比较麻烦,故想到了在hbase上建立hive外部表,然后通过impala进行查询!下面是一组简单的测试结果:
查询数据量:2575656 53G
hive_hbase_news_info:hbase在hive中的映射表,记为t1
hive_hbase_news_info_replic:hive中外部分区表,记为t2
hive_hbase_news_info_u:优化后,hbase在hive中的映射表,记为t3
查询方式:Impala查询
1.比较 count(1)
select count(1) from hive_hbase.hive_hbase_news_info;
select count(1) from hive_hbase.hive_hbase_news_info_replic;
次数 |
t1 |
t2 |
1 |
1m’34s |
12.12s |
2 |
1m’27s |
1.36s |
3 |
1m’24s |
1.28s |
优化后:
select count(1) from hive_hbase.hive_hbase_news_info_u;
次数 |
T3 |
1 |
89.42s |
2 |
62.66s |
3 |
55.98s |
4 |
53.38s |
2.比较 where+limit
select id,year from hive_hbase.hive_hbase_news_info where year = '2012' limit 100;
select id,year from hive_hbase.hive_hbase_news_info_replic where year = 2012 limit 100;
次数 |
t1 |
t2 |
1 |
13.02s |
0.14s |
2 |
12.87s |
0.14s |
3 |
12.99s |
0.14s |
优化后:
select id,year from hive_hbase.hive_hbase_news_info_u where year = '2012' limit 100;
次数 |
T3 |
1 |
20.42s |
2 |
20.43s |
3 |
20.15s |
select id,year from hive_hbase.hive_hbase_news_info where year = '2012' limit 1000;
select id,year from hive_hbase.hive_hbase_news_info_replic where year = 2012 limit 1000;
次数 |
t1 |
t2 |
1 |
21.64s |
0.20s |
2 |
21.35s |
0.20s |
3 |
21.46s |
0.20s |
优化后:
select id,year from hive_hbase.hive_hbase_news_info_u where year = '2012' limit 1000;
次数 |
T3 |
1 |
20.07s |
2 |
20.52s |
3 |
20.32s |
注:limit是很耗时的。
3.比较 where 大约23万条
select id,year from hive_hbase.hive_hbase_news_info where year = '2012' ;
select id,year from hive_hbase.hive_hbase_news_info_replic where year = 2012 ;
次数 |
t1 |
t2 |
1 |
66.45s |
38.46s |
2 |
38.64s |
38.40s |
3 |
38.49s |
38.68s |
优化后:
select id,year from hive_hbase.hive_hbase_news_info_u where year = '2012' ;
次数 |
t1 |
1 |
39.46s |
2 |
39.50s |
3 |
39.47s |
4.比较 no where
select id,year from hive_hbase.hive_hbase_news_info ;
select id,year from hive_hbase.hive_hbase_news_info_replic ;
次数 |
t1 |
t2 |
1 |
171.91s |
175.26s |
2 |
171.77s |
172.94s |
优化后:
select id,year from hive_hbase.hive_hbase_news_info_u;
次数 |
T3 |
1 |
174.47s |
2 |
174.43s |
优化前后参数变化:
1.HBase RegionServer 的 Java 堆栈大小(字节):5G --> 10G
2.HBase 客户端扫描仪缓存:
hbase.client.scanner.caching:100 --> 500
3.HBase 文件最大大小:
hbase.hregion.max.filesize:10G --> 5G
4.添加预分区
5.关闭mapreduce的推测执行:
mapred.map.tasks.speculative.execution --> false
mapred.reduce.tasks.speculative.execution --> false
好像优化后效果并不明显,衰!
点击“阅读原文”查看网上一组测试结果!
本文分享自微信公众号 - HBase工作笔记(HBase-Notes)。
如有侵权,请联系 [email protected] 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。