HBase(9):hbase与hive集成

51 篇文章 3 订阅
30 篇文章 0 订阅

一、实现功能

1.HBase自身的查询非常有限,仅支持有限的scan get,做不了聚合查询(max avg min max),也做不了分组联合(jion)子查询等,但是Hive是支持的,非常友好,非常强大,只是Hive存储不占优势
2.所以,可以将数据保存到HBase,但是可以通过hive映射表,使用hql做一些丰富查询
3.缺点:虽然查询功能丰富了,但是底层的执行依然是mapredcue,会比较的慢,失去了hbase快速查询的优势

二、集成步骤

1.设置环境变量

export HBASE_HOME=/opt/modules/hbase-1.2.0-cdh5.7.0
export HIVE_HOME_lib=/opt/modules/hive-1.1.0-cdh5.7.0/lib

2.设置软连接

ln -s $HBASE_HOME/lib/hbase-server-1.2.0-cdh5.7.0.jar $HIVE_HOME_lib/hbase-server-1.2.0-cdh5.7.0.jar
ln -s $HBASE_HOME/lib/hbase-client-1.2.0-cdh5.7.0.jar $HIVE_HOME_lib/hbase-client-1.2.0-cdh5.7.0.jar
ln -s $HBASE_HOME/lib/hbase-protocol-1.2.0-cdh5.7.0.jar $HIVE_HOME_lib/hbase-protocol-1.2.0-cdh5.7.0.jar
ln -s $HBASE_HOME/lib/hbase-it-1.2.0-cdh5.7.0.jar $HIVE_HOME_lib/hbase-it-1.2.0-cdh5.7.0.jar
ln -s $HBASE_HOME/lib/htrace-core-3.2.0-incubating.jar $HIVE_HOME_lib/htrace-core-3.2.0-incubating.jar
ln -s $HBASE_HOME/lib/hbase-hadoop2-compat-1.2.0-cdh5.7.0.jar $HIVE_HOME_lib/hbase-hadoop2-compat-1.2.0-cdh5.7.0.jar
ln -s $HBASE_HOME/lib/hbase-hadoop-compat-1.2.0-cdh5.7.0.jar $HIVE_HOME_lib/hbase-hadoop-compat-1.2.0-cdh5.7.0.jar
ln -s $HBASE_HOME/lib/high-scale-lib-1.1.1.jar $HIVE_HOME_lib/high-scale-lib-1.1.1.jar	
ln -s $HBASE_HOME/lib/hbase-common-1.2.0-cdh5.7.0.jar $HIVE_HOME_lib/hbase-common-1.2.0-cdh5.7.0.jar

3.配置文件

hive的hive-site.xml中添加

<property>
	<name>hbase.zookeeper.quorum</name>
	<value>hadoop</value>
</property>

三、测试

1.启动环境

(1)hive

(2)yarn

(3)hbase

2.hive建表映射到hbase

(1)创建hive和hbase对应表

CREATE TABLE hive2hbase_emp(
empno int,
ename string,
job string,
mgr int,
hiredate string,
sal double,
comm double,
deptno int
) 
STORED BY 'org.apache.hadoop.hive.hbase.HBaseStorageHandler'
WITH SERDEPROPERTIES ("hbase.columns.mapping" = ":key,info:ename,info:job,info:mgr,info:hiredate,info:sal,info:comm,info:deptno")
TBLPROPERTIES ("hbase.table.name" = "emp");

解释:
-》其中:key,表示拿出emp表中的第一列数据作为hbase的行键)
-》创建两张表,hive2hbase_emp(hive中)和emp(hbase)
-》两张表都是空的

(2)插入hive表数据

只能通过查询已经存在的表然后结合insert进行数据的导入

insert into table hive2hbase_emp select * from emp;

(3)hive中查看结果

hive (default)> select * from default.hive2hbase_emp;
OK
hive2hbase_emp.empno    hive2hbase_emp.ename    hive2hbase_emp.job      hive2hbase_emp.mgr      hive2hbase_emp.hiredate  hive2hbase_emp.sal      hive2hbase_emp.comm     hive2hbase_emp.deptno
7369    SMITH   CLERK   7902    1980-12-17      800.0   NULL    20
7499    ALLEN   SALESMAN        7698    1981-2-20       1600.0  300.0   30
7521    WARD    SALESMAN        7698    1981-2-22       1250.0  500.0   30
7566    JONES   MANAGER 7839    1981-4-2        2975.0  NULL    20
7654    MARTIN  SALESMAN        7698    1981-9-28       1250.0  1400.0  30
7698    BLAKE   MANAGER 7839    1981-5-1        2850.0  NULL    30
7782    CLARK   MANAGER 7839    1981-6-9        2450.0  NULL    10
7788    SCOTT   ANALYST 7566    1987-4-19       3000.0  NULL    20
7839    KING    PRESIDENT       NULL    1981-11-17      5000.0  NULL    10
7844    TURNER  SALESMAN        7698    1981-9-8        1500.0  0.0     30
7876    ADAMS   CLERK   7788    1987-5-23       1100.0  NULL    20
7900    JAMES   CLERK   7698    1981-12-3       950.0   NULL    30
7902    FORD    ANALYST 7566    1981-12-3       3000.0  NULL    20
7934    MILLER  CLERK   7782    1982-1-23       1300.0  NULL    10
Time taken: 0.987 seconds, Fetched: 14 row(s)

(4)hbase中查看结果

	hbase(main):002:0> scan "emp"
	ROW                         COLUMN+CELL                                                                    
	 7369                       column=info:deptno, timestamp=1543596157157, value=20                          
	 7369                       column=info:ename, timestamp=1543596157157, value=SMITH                        
	 7369                       column=info:hiredate, timestamp=1543596157157, value=1980-12-17                
	 7369                       column=info:job, timestamp=1543596157157, value=CLERK                          
	 7369                       column=info:mgr, timestamp=1543596157157, value=7902                           
	 7369                       column=info:sal, timestamp=1543596157157, value=800.0                          
	 7499                       column=info:comm, timestamp=1543596157157, value=300.0                         
	 7499                       column=info:deptno, timestamp=1543596157157, value=30                          
	 7499                       column=info:ename, timestamp=1543596157157, value=ALLEN                        
	 7499                       column=info:hiredate, timestamp=1543596157157, value=1981-2-20                 
	 7499                       column=info:job, timestamp=1543596157157, value=SALESMAN                       
	 7499                       column=info:mgr, timestamp=1543596157157, value=7698                           
	 7499                       column=info:sal, timestamp=1543596157157, value=1600.0                         
	 7521                       column=info:comm, timestamp=1543596157157, value=500.0                         
	 7521                       column=info:deptno, timestamp=1543596157157, value=30                          
	 7521                       column=info:ename, timestamp=1543596157157, value=WARD                         
	 7521                       column=info:hiredate, timestamp=1543596157157, value=1981-2-22                 
	 7521                       column=info:job, timestamp=1543596157157, value=SALESMAN                       
	 7521                       column=info:mgr, timestamp=1543596157157, value=7698                           
	 7521                       column=info:sal, timestamp=1543596157157, value=1250.0       

(5)好处

集成之后的好处:数据在hbase中保存,意味着表中的数据在hbase中是可以任意修改的

put 'emp','7369','info:sal','888.0'

3.hbase中的表映射到hive中

(1)必要条件:
    -》映射hbase表数据,hive中创建的表必须是外部表
    -》并且hbase中的rowkey必须要映射到hive中

(2)hive中操作

create external table hbase2hive(
id int,
name string,
age int
)
STORED BY 'org.apache.hadoop.hive.hbase.HBaseStorageHandler'
WITH SERDEPROPERTIES ("hbase.columns.mapping" = "info:name,info:age")
TBLPROPERTIES ("hbase.table.name" = "stu_info");

(3)hive中结果

hive (default)> select * from hbase2hive;
OK
hbase2hive.id   hbase2hive.name hbase2hive.age
10001   ngsan   12
10002   lisi    13
10003   wangwu  14
10004   zhaoliu 15
10005   xieqi   16
10006   zhangsan        20
10011   ngsan   12
10012   lisi    13
10013   wangwu  14
10014   zhaoliu 15
10015   xieqi   16
Time taken: 1.658 seconds, Fetched: 11 row(s)

4.删除操作

(1)如果是hive映射到habse

        删除hive中的表,对应hhbase中的会一起被删除

drop table hive2hbase_emp;

(2)如是hbase映射hive    删除hive中的表,是不会影响hbase中的表,

drop table hbase2hive;

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值