Hive和Hbase的对接

31 篇文章 2 订阅
6 篇文章 0 订阅

文章目录

 

一、配置hive

1、创建hive所需要的hbase相关联包的软链接

ln -s $HBASE_HOME/lib/hbase-common-1.4.10.jar  $HIVE_HOME/lib/hbase-common-1.4.10.jar
ln -s $HBASE_HOME/lib/hbase-server-1.4.10.jar $HIVE_HOME/lib/hbase-server-1.4.10.jar
ln -s $HBASE_HOME/lib/hbase-client-1.4.10.jar $HIVE_HOME/lib/hbase-client-1.4.10.jar
ln -s $HBASE_HOME/lib/hbase-protocol-1.4.10.jar $HIVE_HOME/lib/hbase-protocol-1.4.10.jar
ln -s $HBASE_HOME/lib/hbase-it-1.4.10.jar $HIVE_HOME/lib/hbase-it-1.4.1.jar
ln -s $HBASE_HOME/lib/hbase-hadoop2-compat-1.4.10.jar $HIVE_HOME/lib/hbase-hadoop2-compat-1.4.10.jar
ln -s $HBASE_HOME/lib/hbase-hadoop-compat-1.4.10.jar $HIVE_HOME/lib/hbase-hadoop-compat-1.4.10.jar
ln -s $HBASE_HOME/lib/htrace-core-3.1.0-incubating.jar $HIVE_HOME/lib/htrace-core-3.1.0-incubating.jar

2、在hive-site.xml中修改zookeeper的属性,如下:

<property>
  <name>hive.zookeeper.quorum</name>
  <value>node01,node02,node03</value>
  <description>The list of ZooKeeper servers to talk to. This is only needed for read/write locks.</description>
</property>
<property>
  <name>hive.zookeeper.client.port</name>
  <value>2181</value>
  <description>The port of ZooKeeper servers to talk to. This is only needed for read/write locks.</description>
</property>

二、hive中数据与hbase相关联

1、在 Hive 中创建表同时关联 HBase (hive表hive_hbase_emp_table关联hbase表hbase_emp_table)

CREATE TABLE hive_hbase_emp_table(
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" = "hbase_emp_table");

注意:如果这步提示出错:Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.DDLTask. org.apache.hadoop.hbase.HTableDescriptor.addFamily(Lorg/apache/hadoop/hbase/HColumnDescriptor;)V,只需要将hive/lib/hive-hbase-handler-1.2.1.jar下载到本地,在hbase版本的jar包下编译即可(推荐用Eclipse的export很方便就能编译成功),上传编译后的jar包到hive/lib目录下即可解决

2、查看hive和hbase中表是否创建成功
在这里插入图片描述
在这里插入图片描述
3、在Hive中创建临时中间表,用于load文件中的数据
create table emp(
empno int,
ename string,
job string,
mgr int,
hiredate string,
sal double,
comm double,
deptno int)
row format delimited fields terminated by ‘\t’;
4、向Hive中间表中load数据

load data local inpath '/home/bigdata/data/emp.txt' into table emp;

测试数据:
7369    SMITH   CLERK   7902    1980-12-17      800.00          20
7499    ALLEN   SALESMAN        7698    1981-2-20       1600.00 300.00  30
7521    WARD    SALESMAN        7698    1981-2-22       1250.00 500.00  30
7566    JONES   MANAGER 7839    1981-4-2        2975.00         20
7654    MARTIN  SALESMAN        7698    1981-9-28       1250.00 1400.00 30
7698    BLAKE   MANAGER 7839    1981-5-1        2850.00         30
7782    CLARK   MANAGER 7839    1981-6-9        2450.00         10
7788    SCOTT   ANALYST 7566    1987-4-19       3000.00         20
7839    KING    PRESIDENT               1981-11-17      5000.00         10
7844    TURNER  SALESMAN        7698    1981-9-8        1500.00 0.00    30
7876    ADAMS   CLERK   7788    1987-5-23       1100.00         20
7900    JAMES   CLERK   7698    1981-12-3       950.00          30
7902    FORD    ANALYST 7566    1981-12-3       3000.00         20
7934    MILLER  CLERK   7782    1982-1-23       1300.00         10

5、通过insert命令将中间表中的数据导入到Hive关联Hbase的那张表中
insert into table hive_hbase_emp_table select * from emp;
6、查看Hive以及关联的HBase表中是否已经成功的同步插入了数据
在这里插入图片描述
在这里插入图片描述

附加
为什么要创建中间表使用insert语句往hive表插入数据,不能直接使用load命令往hive表中导入数据吗?
答案是不能的。因为hive表与hbase表相关联的话,实际数据是存储在hbase中的。而hbase中的数据是以HFile的形式存储在hdfs上的,如果直接使用load命令,是以txt格式导入到hive表的,insert命令是走mapreduce任务的

三、hbase中数据与hive相关联

如果一张表在hbase中存放了很久,数据量并没有达到hbase数据量的要求,那么就可以在hive中中创建一个外部表来关联hbase中的表,使之可以借助hive来分析hbase这张表中的数据。

1、在Hive中创建外部表(hbase表hbase_emp_table关联hive表relevance_hbase_emp)

create external table relevance_hbase_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" = "hbase_emp_table");
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

2、在hbase表hbase_emp_table中插入一条数据,观察hive表relevance_hbase_emp中是否有新数据
在这里插入图片描述
在这里插入图片描述
3、关联成功后就可以使用Hive函数进行一些分析操作了

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值