Hbase与Hive集成
- 1、SQL on Hbase
- HiveSQL处理Hbase中的数据?
- 常见的SQL on Hbase
- 2、Hive与Hbase集成
1、SQL on Hbase
- Hive:可以用SQL,底层是MapReduce
- Hbase:不能用SQL,可以用MapReduce
HiveSQL处理Hbase中的数据?
- MapReduce
- |
- SQL on Hbase
- 使用SQL来操作Hbase
常见的SQL on Hbase
- Hive:通过MapReduce实现与Hbase的关联
- 比较慢
- 主要应用于数据仓库中
利用Hbase的按列存储来存储半结构化的数据
- 将Hbase的半结构化数据变成Hive中的结构化数据
- 利用hbase的多版本来存储一个数据不同的状态
- 昨天:订单是成功的订单
- 今天:订单是退款的订单
- 订单id是不变的
- 需要记录一个订单在不同时间的多个状态?
Hbase多版本
- Phoenix:专门用于为Hbase提供SQL操作的工具
- 这个工具直接调用Hbase的API来实现,非常快
- 这个工具的性能是所有SQL on Hbase中最快的
基于Hbase构建二级索引
2、Hive与Hbase集成
- 将HBASE中的jar包拷贝到Hive的lib目录
复制代码
1
2
3
4
5
6ln -s /export/servers/hbase-1.2.0-cdh5.14.0/lib/hbase-client-1.2.0-cdh5.14.0.jar /export/servers/hive-1.1.0-cdh5.14.0/lib/hbase-client-1.2.0-cdh5.14.0.jar ln -s /export/servers/hbase-1.2.0-cdh5.14.0/lib/hbase-hadoop2-compat-1.2.0-cdh5.14.0.jar /export/servers/hive-1.1.0-cdh5.14.0/lib/hbase-hadoop2-compat-1.2.0-cdh5.14.0.jar ln -s /export/servers/hbase-1.2.0-cdh5.14.0/lib/hbase-hadoop-compat-1.2.0-cdh5.14.0.jar /export/servers/hive-1.1.0-cdh5.14.0/lib/hbase-hadoop-compat-1.2.0-cdh5.14.0.jar ln -s /export/servers/hbase-1.2.0-cdh5.14.0/lib/hbase-it-1.2.0-cdh5.14.0.jar /export/servers/hive-1.1.0-cdh5.14.0/lib/hbase-it-1.2.0-cdh5.14.0.jar ln -s /export/servers/hbase-1.2.0-cdh5.14.0/lib/hbase-server-1.2.0-cdh5.14.0.jar /export/servers/hive-1.1.0-cdh5.14.0/lib/hbase-server-1.2.0-cdh5.14.0.jar
- 修改hive-site.xml:Hive通过SQL访问Hbase,就是Hbase的客户端,就要连接zookeeper
复制代码
1
2
3
4
5
6
7
8
9<property> <name>hive.zookeeper.quorum</name> <value>node-01,node-02,node-03</value> </property> <property> <name>hbase.zookeeper.quorum</name> <value>node-01,node-02,node-03</value> </property>
- 修改hive-env.sh
复制代码
1
2export HBASE_HOME=/export/servers/hbase-1.2.0-cdh5.14.0
- 启动Hive
复制代码
1
2
3
4
5
6
7#先启动metastore服务 start-metastore.sh #然后启动hiveserver start-hiveserver2.sh #然后启动beeline start-beeline.sh
- 在Hive中创建关联Hbase的表
- 如果Hbase中表不存在:【用的比较少】
- 创建测试数据文件
复制代码
1
2
3
4
5
6vim /export/datas/hive-hbase.txt 1,zhangsan,80 2,lisi,60 3,wangwu,30 4,zhaoliu,70
- 创建测试表
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13--创建测试数据库 create database course; --切换数据库 use course; --创建原始数据表 create external table if not exists course.score( id int, cname string, score int ) row format delimited fields terminated by ',' stored as textfile ; --加载数据文件 load data local inpath '/export/datas/hive-hbase.txt' into table score;
- 创建一张Hive与HBASE的映射表
复制代码
1
2
3
4
5
6
7
8
9create table course.hbase_score( id int, cname string, score int ) stored by 'org.apache.hadoop.hive.hbase.HBaseStorageHandler' with serdeproperties("hbase.columns.mapping" = "cf:name,cf:score") tblproperties("hbase.table.name" = "hbase_score");
- 将测试表的数据写入映射表
复制代码
1
2insert overwrite table course.hbase_score select id,cname,score from course.score;
- 如果Hbase中表已存在,只能创建外部表【比较常用的方式】
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23create external table course.stu( key string, name string, age string, phone string ) row format serde 'org.apache.hadoop.hive.hbase.HBaseSerDe' stored by 'org.apache.hadoop.hive.hbase.HBaseStorageHandler' with serdeproperties("hbase.columns.mapping" = ":key,basic:name,basic:age,other:phone") tblproperties("hbase.table.name" = "student:stu"); -- count计数 hbase org.apache.hadoop.hbase.mapreduce.RowCounter 'student:stu' -- 查看数据 scan 'student:stu',{LIMIT=>5} get 'student:stu',1
- 注意事项:
- Hive关联时
如果Hbase表不存在,默认以hive表的第一列作为Hbase的rowkey
- 如果表已存在,使用:key来标识rowkey
- Hive与Hbase的关联表
- 是不能通过load命令加载数据进去的
Hbase中的数据是特殊的存储,内存和Storefile存储,必须经过程序写入
load命令是直接将文件放入目录的方式实现的,所以不能用于加载数据到hbase
==只能用insert命令==
最后
以上就是无语钢笔最近收集整理的关于hbase--Hbase与Hive集成1、SQL on Hbase2、Hive与Hbase集成的全部内容,更多相关hbase--Hbase与Hive集成1、SQL内容请搜索靠谱客的其他文章。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复