hbase和Hive的整合
1.原理
Hive 与 HBase 利用两者本身对外的 API 来实现整合,主要是靠 HBaseStorageHandler 进行通信,利用 HBaseStorageHandler,Hive 可以获取到 Hive 表对应的 HBase 表名,列簇以及列,InputFormat 和 OutputFormat 类,创建和删除 HBase 表等。
Hive 访问 HBase 中表数据,实质上是通过 MapReduce 读取 HBase 表数据,其实现是在 MR中,使用 HiveHBaseTableInputFormat 完成对 HBase 表的切分,获取 RecordReader 对象来读取数据。
对 HBase 表的切分原则是一个 Region 切分成一个 Split,即表中有多少个 Regions,MR 中就有多少个 Map。
读取 HBase 表数据都是通过构建 Scanner,对表进行全表扫描,如果有过滤条件,则转化为Filter。当过滤条件为 rowkey 时,则转化为对 rowkey 的过滤,Scanner 通过 RPC 调用RegionServer 的 next()来获取数据
2.实例
实例
需求:将hbase中的一张user_info表的数据同步到hive的表中
hbase表的数据如下
hbase(main):002:0> scan “user_info”
Hive端的操作
1.进入hive的客户端
2.为了让hive找到hbase的路径需要进行如下的设置
- 指定 hbase 所使用的 zook