Hive和HBase连接

Hive和HBase连接

1.首先更改Hive下的hive-site.xml

​ 在文件中加入zookeeper的相关依赖

<property>
  <name>hive.zookeeper.quorum</name>
  <value>master,slave01,slave02</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>

image-20230411212400169

2.创建软连接

​ 将HBase下的某些jar包软连接到Hive下:

​ hbase-common-1.4.10.jar hbase-server-1.4.10.jar hbase-client-1.4.10.jar hbase-protocol-1.4.10.jar

​ hbase-it-1.4.10.jar hbase-hadoop2-compat-1.4.10.jar hbase-hadoop-compat-1.4.10.jar

​ htrace-core-3.1.0-incubating.jar

​ 任意目录下操作即可

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

3.在Hive下创建表关联到HBase

注意:建表之前先把zookeeper hadoop hbase hive mysql 全部启动(个人认为得全部启动)

​ 例如:Hive下创建的hive_hbase_emp_table(自己命名即可)表和HBase下的hbase_emp_table(自己命名即可)相关连

​ 创建完成后,可以在Hive下看到hive_hbase_emp_table表,在HBase下看到hbase_emp_table表

# 在hive下创建员工信息表
# empno 员工号 ename 姓名 job 工作名 mgr -- hiredate 入职时间 sal 薪资 comm 津贴 deptno 部门编号
hive> 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");
1) 可能会出现的问题(没有出现该问题可跳过该步):
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
# 或者
Cannot find class 'org.apache.hadoop.hive.hbase.struct.HBaseStorageHandler'
2) 原因:

​ Hive和HBase关联时,在创建表时,在hive下会出现hive-hbase-handler-1.2.2.jar,由于其引用的版本过低,导致HBase不能识别。

3) 解决办法:

​ 修改hive-hbase-handler-1.2.2.jar的HBase相关jar包

1. 打开一个eclipse
2. 在eclipse中随便创建已给java工程
3. 将我们之前下载好的源码导入到eclipse的src目录下,这个时候一会发现一堆错误提示
file ---> import ---> filesystem--->选择你的源码--->finish
4. 创建一个lib目录,把准备好的jar包都拷贝到lib目录中
5. 选中所有的jar包---鼠标右键--->build path
你就会发现不报错
6. 导出
file--->export--->jar file --->
7. 将这个jar包拷贝回hive的lib目目录中,把原来的那个jar包给干掉!!!

​ 具体方法:

(1).首先从官网下载相关jar包

​ 地址:http://archive.apache.org/dist/hive/hive-1.2.2/ 注意和自己的Hive版本对应

(2).解压缩到本地文件夹

​ 任意目录下都行!!!

在这里插入图片描述

(3).在eclipse操作

​ 可以选择在Windows下操作,也可以在Linux下的eclipse操作,我选择在Linux下操作(导包方便)

​ 在Windows下需要将虚拟机中hadoop和hbase的lib下的jar包导出来,感觉挺费劲(个人认为不好用)

​ 在Linux下:

​ 将解压问价拖入虚拟机的桌面

在这里插入图片描述

​ 在eclipse下创建工程后导入文件

image-20230423192257390

image-20230423192318631

在这里插入图片描述

​ 将Hive和HBase下的lib下的所有jar包导入

image-20230423192335930

​ !!!注意:先找到hive-hbase-handler-1.2.2.jar包并移除,然后将org文件夹移入src下

image-20230423192349337

​ 导出为hive-hbase-handler-1.2.2.jar

image-20230423192405178

在这里插入图片描述

image-20230423192419851

(4).将jar包移动到hive的lib下替换原来的jar包
mv ./hive-hbase-handler-1.2.2.jar /usr/local/hive/lib/
(5). 重启hive
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");

​ 可以通过命令查看建表是否成功(如果hive和hbase下均出先刚建的表,则成功)

hive> show tables;
hbase> list;

4.写数据

Hive写入HBase:

​ 例如:先在hive的tmp下建立emp.txt(文件可任意建,内容需和上面建的表一致,可用下面的例子)

image-20230423192438255

7369	SMITH	CLERK	7902	1980-12-17	800.00	20	1000
7368	SMITH	CLERK	7902	1980-12-17	800.00	20	1001
7367	SMITH	CLERK	7902	1980-12-17	800.00	20	1002
7366	SMITH	CLERK	7902	1980-12-17	800.00	20	1003
7365	SMITH	CLERK	7902	1980-12-17	800.00	20	1004
7364	SMITH	CLERK	7902	1980-12-17	800.00	20	1005
7363	SMITH	CLERK	7902	1980-12-17	800.00	20	1006
7362	SMITH	CLERK	7902	1980-12-17	800.00	20	1007
7361	SMITH	CLERK	7902	1980-12-17	800.00	20	1008
7360	SMITH	CLERK	7902	1980-12-17	800.00	20	1009

​ 创建一个中间表,用于将数据导入关联表中(中间表字段需要和之前创建的关联表字段相同)

# 创建中间表
hive> 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';
# 将文件导入该表
hive> load data local inpath '/usr/local/hive/tmp/emp.txt' into table emp;
# 查询该表导入关联表
hive> insert into table hive_hbase_emp_table select * from emp;
# 在hive下可查看该表信息
hive> select * from hive_hbase_emp_table;
# 在hbase下也可查看到相应信息
hbase> scan 'hbase_emp_table'

image-20230423192457055

image-20230423192514794

HBase写入Hive:

​ 可直接在hbase下向hbase_emp_table下插入文件,在hive下可查看到相应信息

hbase> put 'hbase_emp_table', '7935', 'info:ename', 'zahngsan'

image-20230423192536011

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

hive> 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");
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值