等待下一个秋

  • Spark
  • Flink
  • Hive
  • 数据仓库
  • ClickHouse
  • 收徒弟
  • Java
    • Spring
    • Mybatis
    • SpringBoot
    • 面试题
  • Python
    • Python基础
    • 爬虫
    • Numpy
    • matplotlib
    • Flask
  • 技术杂谈
    • Linux知识
    • Docker
    • Git教程
    • Redis教程
    • mysql
    • 前端
    • R语言
    • 机器学习
  • 关于我
  • 其它
    • 副业挣钱
    • 资料下载
    • 资料文档
专注于Hadoop/Spark/Flink/Hive/数据仓库等
关注公众号:大数据技术派,获取更多学习资料。
  1. 首页
  2. Hive
  3. 正文

hive关联hbase表

2020年5月25日 5923点热度 0人点赞 0条评论

Hive系列文章

  1. Hive表的基本操作
  2. Hive中的集合数据类型
  3. Hive动态分区详解
  4. hive中orc格式表的数据导入
  5. Java通过jdbc连接hive
  6. 通过HiveServer2访问Hive
  7. SpringBoot连接Hive实现自助取数
  8. hive关联hbase表
  9. Hive udf 使用方法
  10. Hive基于UDF进行文本分词
  11. Hive窗口函数row number的用法
  12. 数据仓库之拉链表

Hbase是一种NoSQL数据库,这意味着它不像传统的RDBMS数据库那样支持SQL作为查询语言。一种方法是使用hive关联hbase表,可以完成对hbase表的数据插入(insert)和查询(select)。

Hive和HBase的通信原理

Hive与HBase整合的实现是利用两者本身对外的API接口互相通信来完成的,这种相互通信是通过$HIVE_HOME/lib/hive-hbase-handler-{hive.version}.jar工具类实现的。通过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()来获取数据;

基本通信原理如下:

hive-hbase

新建hive表关联hbase表

hive关联的hbase表,对应的hbase表如果不存在,会自动创建,test是hbase的一个namespace,相当于mysql中的database需要提前建好:create_namespace 'test'。

create table if not exists test.test
(
id string comment '用户id',
name string comment '姓名'
)
stored by 'org.apache.hadoop.hive.hbase.HBaseStorageHandler'
with serdeproperties("hbase.columns.mapping" = ":key,info:name")
tblproperties("hbase.table.name" = "test:test");

上面的命令创建了一张hive表,跟hbase表是联系在一起的,对应关系:

名称 含义
id :key,即对应hbase表的rowkey
name 对应hbase的info列簇name字段
hive表名:test.test hbase表名:test:test

表名可以不相同的,但是通常为了统一,表命建得相同。

通过hive插入数据到hbase表

如果有这么一个需求,我们想把hive一张结果表存一份数据到hbase,可以使用insert select方式,将hive表的数据插入到hbase表中去。假设现在有一张hive表test.test2:

hive> select * from test.test2;
OK
1   tom
2   jack
3   alice

将hive表test.test2的数据导入到hbase表:

insert into test.test select * from test.test2;

这就将数据导入hbase表了,这时候不管是在hive里面,还是hbase shell里面,都是可以直接查询到数据的。

hive> select * from test.test;
OK
1   tom
2   jack
3   alice

从hbase里面scan也是有数据的。

hbase(main):005:0> scan 'test:test'
ROW                              COLUMN+CELL                                                                                
 1                               column=info:name, timestamp=1590221288866, value=tom                                       
 2                               column=info:name, timestamp=1590221288866, value=jack                                      
 3                               column=info:name, timestamp=1590221288866, value=alice                                     

实际数据是存储在hbase数据目录里面的:

[hadoop@slave3 ~]$ hdfs dfs -ls /hbase/data/test/test
Found 3 items
drwxr-xr-x   - hadoop supergroup          0 2020-05-23 16:05 /hbase/data/test/test/.tabledesc
drwxr-xr-x   - hadoop supergroup          0 2020-05-23 16:05 /hbase/data/test/test/.tmp
drwxr-xr-x   - hadoop supergroup          0 2020-05-23 16:05 /hbase/data/test/test/722a0bfced3a534029e5093ebba1d55c
[hadoop@slave3 ~]$ hdfs dfs -ls /user/hive/warehouse/test.db/test

对hbase表做统计查询

有时候我们想对hbase表的数据进行统计分析,可以通过mapreduce / spark API,通过代码逻辑统计分析,但是这些成本有点高,能用sql的尽量用sql做大数据分析,这时候hive关联hbase表查询就派上用场了。

hive> select name, count(1) from test.test group by name;

alice   1
jack    1
tom 1
标签: Hbase Hive 大数据
最后更新:2023年2月9日

等待下一个秋

待我代码写成,便娶你为妻!专注于Hadoop/Spark/Flink/Hive/数据仓库等,关注公众号:大数据技术派,获取更多学习资料。

打赏 点赞
< 上一篇
下一篇 >

文章评论

取消回复

等待下一个秋

待我代码写成,便娶你为妻!专注于Hadoop/Spark/Flink/Hive/数据仓库等,关注公众号:大数据技术派,获取更多学习资料。

搜一搜
微信
最新 热点 随机
最新 热点 随机
ChatGPT可以做什么 ClickHouse 自定义分区键 ClickHouse数据副本引擎 ClickHouse ReplacingMergeTree引擎 ClickHouse MergeTree引擎 clickhouse简介
MySQL示例数据库下载 Hive中的锁的用法和使用场景 R语言爬虫之rvest包 第十章-Python3中Web开发框架flask实现邮件功能 NumPy从源码构建 R语言学习之向量——启航
标签聚合
Java mysql 数据仓库 Python 大数据 Hive 算法 Flink 挣钱 书籍 Redis R语言
文章归档
  • 2023年2月
  • 2022年12月
  • 2022年11月
  • 2022年9月
  • 2022年7月
  • 2022年6月
  • 2022年5月
  • 2022年4月
  • 2022年3月
  • 2022年2月
  • 2022年1月
  • 2021年12月
  • 2021年11月
  • 2021年10月
  • 2021年9月
  • 2021年8月
  • 2021年6月
  • 2021年5月
  • 2021年4月
  • 2021年3月
  • 2021年2月
  • 2021年1月
  • 2020年12月
  • 2020年11月
  • 2020年10月
  • 2020年9月
  • 2020年8月
  • 2020年7月
  • 2020年5月
  • 2020年4月
  • 2020年1月
  • 2019年9月
  • 2019年8月
  • 2019年7月
  • 2019年6月
  • 2019年5月
  • 2019年4月
  • 2019年3月
  • 2019年1月
  • 2018年12月
  • 2017年5月

©2022 ikeguang.com. 保留所有权利。

鄂ICP备2020019097号-1

鄂公网安备 42032202000160号