版本 虚拟机centOS7 hive 1.2.1 hbase 1.2.6
1,在hive-site.xml中添加配置
<property>
<name>hbase.zookeeper.quorum</name>
<value>test-hadoop-2-21,test-hadoop-2-22,test-hadoop-2-23</value>
</property>
2,将Hbase/lib下的jar包拷贝到hive/lib下 给hive整合hbase提供环境
hbase-server-1.2.6.jar
hbase-client-1.2.6.jar
hbase-protocol-1.2.6.jar
hbase-hadoop2-compat-1.2.6.jar
hbase-common-1.2.6.jar
hbase-hadoop-compat-1.2.6.jar
htrace-core-3.1.0-incubating.jar
metrics-core-2.2.0.jar
另外还有一个特殊的包hive-hbase-handler-1.2.1需要编译 (hive1.2.2版本的不需要)
如果没有这个jar包,就会报错:
message:HBase table xsg:test05 doesn’t exist while the table is declared as an external table.
解决方法:
下载hive的源码包 通过eclipse进行编译 :说白了就是把缺少的jar包添加进行,重新打jar包上传即可
import -> File System -> hbase-handler/src/java -> 确定 -> Finish
这是一个压缩包,解压得到源码包 ,,后在eclipse中操作
创建jar包的目录Lib,将下载好的jar包复制,光标放在lib上 —>粘贴
选择Build Path点击Add to Bulid Path 至此可以导出我们需要的jar包了。
在org.apache.hadoop.hive.hbase包上点击右键,选择export 选择java下的JAR file,选择一个生成位置,即可点击完成。
到这里我们就生成了符合自己Hbase版本的hive-hbase-handler了。
4,将jar包上传到hive/lib中就可以创建hive表进行测试了
如果报错org.apache.hadoop.hbase.client.RetriesExhaustedException: Can’t get the location for replica
很可能是你的hbase服务或者内部服务之间有问题了,看一下日志吧!
创建外部表将hbase中的数据在hive中做一个映射,就可以在hive中操作hbase了,注意建表时两个表中的字段类型与个数要一致,存放数据时没有的字段会显示NULL
create external table test01 (rowkey string,name string, age int) STORED BY 'org.apache.hadoop.hive.hbase.HBaseStorageHandler' WITH SERDEPROPERTIES ("hbase.columns.mapping" = ":key,info:name,info:age") TBLPROPERTIES ("hbase.table.name" = "test01");
注意:如果是default中的表就只写表名 "hbase.table.name" = "test01"
如果是某个命名空间的表 要指明命名空间 "hbase.table.name"="xsg:aaa"
5,将hive数据写入hbase
insert into table aaa select * from bbb;
之后在hbase中查询数据,数据已经从hive复制到了hbase中
最后要感谢提供方法 的博主,文档链接
https://blog.csdn.net/linxiyimeng007/article/details/80969151
提供了主要eclipse操作方法
https://jingyan.baidu.com/article/ca41422fc76c4a1eae99ed9f.html
Eclipse中导入外部jar包
https://www.cnblogs.com/acm-bingzi/p/decompileJar.html
当时理解错了,还来了一段反编译
https://blog.csdn.net/danielchan2518/article/details/81075542?utm_source=blogxgwz1
报错:Can’t get the location for replica时提供思路
https://www.cnblogs.com/tnsay/p/5783815.html
最后再来几条测试