hbase 是NoSql 数据库,可以做 oltp,hive 是 基于mapReduce的 sql 查询引擎,可以做大数据分析;
hive 提供了与hbase整合的机制,也就是 hive on hbase 机制,以外表的方式查询hbase的数据;
那么比较确定的是,hive on hbase 应该会比 hive on hdfs 要慢;
对于hive on hbase 的问题,可以调优的一些参数:
一方面是 hive 是 mapreduce 的本身的参数,
另外一方面是 连接 hbase scan 数据的参数;
比如我们执行一个 select*from hbase 表;
就会存在 rpc 暴涨的问题:
public static final String HBASE_SCAN_CACHE = "hbase.scan.cache";
public static final String HBASE_SCAN_CACHEBLOCKS = "hbase.scan.cacheblock";
public static final String HBASE_SCAN_BATCH = "hbase.scan.batch";
其中, cacheblock 的坑 参考(相关的坑: https://www.jianshu.com/p/41e9982c5b1e)
一次大量的 select 会把 cache 中的数据,刷新为 本次 批量数据,其实并不是热点;
cache + batch 的作用:
https://www.cnblogs.com/Levyxu/p/10659748.html
select * 的时候,每次读取一行 数据就要发起一个rpc,上亿的 row,就是上亿的rpc;
batch 决定了 column 的数量, 一个column 一个 cell; cache + batch 共同决定了 需要多少个 rpc;
那么我们在 hive 查询hbase 出现些性能问题的时候,可以看看rpc 的问题,然后 设置cache + batch
另外为了不影响 热点缓存,还可以设置 cacheblock = false;
网友评论