【大数据】HBase和Hive集成版本冲突:HTableDescriptor.addFamily(/hbase/HColumnDescriptor;)V/ IDEA导入外部jar包和导出jar包

一、背景

在进行Hive关联HBase的时候,在Hive上查询关联的表hive_hbase_emp_table的时候,出现了错误:【注意:查询hive上的其他表没有问题】

FAILED: 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中创建表同时关联HBase

hive (default)> 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整合HBase --解决版本冲突。我根据这个文章的步骤往下走即可。

注意,在修改hive-site.xml配置文件,将以下jar包添加到hive-site.xml配置的hive.aux.jars.path属性中。:

hbase-common-1.3.1.jar
hbase-server-1.3.1.jar
hbase-client-1.3.1.jar
hbase-protocol-1.3.1.jar
hbase-it-1.3.1.jar
htrace-core-3.1.0-incubating.jar
hbase-hadoop2-compat-1.3.1.jar
hbase-hadoop-compat-1.3.1.jar

最重要的是重新编译hive/lib/hive-hbase-handler-1.2.1.jar

我用了提供的jar包,但是还是报错了。所以自己需要重新编译一遍。上面的文章用的是Eclipse来编译,参考以上文章,我用的是IDEA来编译。具体步骤:

三、重新编译hive/lib/hive-hbase-handler-1.2.1.jar

1. 下载Hive源码地址

2.  进入Hive源码,找到hbase-handler文件夹。进入【hbase-handler\src\java】,找到org文件夹

3. 在IDEA中创建一个Java Project。将上一步的【org】文件夹直接拉到java项目的src文件夹下.

4. 在项目的根目录下建一个目录【lib】,然后教把linux下Hive和HBase 安装包lib目录下的所有jar包,复制到java project的lib目录下

5. 把lib包下的所有jar包Add As Library

6. 将项目Build一下

7. 修改【hive_hbase/org/apache/hadoop/hive/hbase/HBaseStorageHandler.java】的492行代码,改成如下:

参考: http://www.ikeguang.com/2018/08/15/hive-hbase-handler-1-2-1/

8.找到IDEA 编译后的class文件路径:参考【https://jingyan.baidu.com/article/a65957f43dfb0324e67f9b0a.html

   如图,使我的Class文件的路径

9. 编译项目为jar包

【File】--> 【Project Structure】--> 【Artifacts】--> 【JAR】--> 【Empty】

        

出现以下窗口,点击【ok】

这里面的【Name】和【Output directory】可以自己指定。【Output directory】就是生成的jar存放的地址。【Name】就是jar名字,可以指定为【hive-hbase-handler-1.2.1】。

点击【绿色的+】--> 【Direcotry Conetent】

然后在选择编译后的class文件所在的目录,注意:【最后编译号的jar中要包含META-INF文件夹和org文件夹,所以选择他们上一层的文件夹,也就是hive_hbase/out/production/hive_hbase

变成如下页面,点击ok

 

10. 点击Build选项中的【Build Artifacts】。在【Build Artifacts】中选择要你刚才生成的Artifact。也就是【hive-hbase-handler-1.2.1】。点击【Build】

         

 

11. 在项目的【out】文件夹内就出现了【artifiacts/hive-hbase-handler-1.2.1】,在这里能找到我们已经编译的jar。在文件夹中找到这个jar。

 

12. 打开jar,更名为【hive-hbase-handler-1.2.1.jar】,查看其中结构  。【最后编译号的jar中包含了META-INF文件夹和org文件夹,而且是class文件】

13. 将linux中的hive/lib原来的【hive-hbase-handler-1.2.1.jar】删除,然后将这个新的jar放入lib文件夹中。

 

四、重新在hive中查询表hive_hbase_emp_table,成功

五、注意

hive (default)> select * from  hive_hbase_emp_table;

在hive中查询的时候,发生了以下错误:

FAILED: RuntimeException org.apache.hadoop.hive.ql.metadata.HiveException: Error in loading storage handler.org.apache.hadoop.hive.hbase.HBaseStorageHandler

原因:我在IDEA中生成的jar中添加的是java文件,而不是编译后的class文件。所以这里报错。正确的应该是如下:【都是.class文件】

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值