我是靠谱客的博主 无语钢笔,最近开发中收集的这篇文章主要介绍hbase--Hbase与Hive集成1、SQL on Hbase2、Hive与Hbase集成,觉得挺不错的,现在分享给大家,希望可以做个参考。
概述
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目录
ln -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
<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
export HBASE_HOME=/export/servers/hbase-1.2.0-cdh5.14.0
- 启动Hive
#先启动metastore服务
start-metastore.sh
#然后启动hiveserver
start-hiveserver2.sh
#然后启动beeline
start-beeline.sh
- 在Hive中创建关联Hbase的表
- 如果Hbase中表不存在:【用的比较少】
- 创建测试数据文件
vim /export/datas/hive-hbase.txt
1,zhangsan,80
2,lisi,60
3,wangwu,30
4,zhaoliu,70
- 创建测试表
--创建测试数据库
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的映射表
create 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");
- 将测试表的数据写入映射表
insert overwrite table course.hbase_score select id,cname,score from course.score;
- 如果Hbase中表已存在,只能创建外部表【比较常用的方式】
create 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 on Hbase2、Hive与Hbase集成所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复