本文主要介绍如何通过Hive访问HBase增强版。
HBase增强版支持Hive访问。但是Hive调用HBase的方式并非标准用法,而是直接调用了HBase内部类。因此无法采用直接加入alihbase-connector的JAR包的方式做兼容,需要替换hive/lib
下已有的hbase JAR包。
hive/lib
中hbase 开头的所有的jar。如图中红框所示的所有jar文件。注意不要删除hive-hbase-handler-{version}.jar
,这是Hive访问HBase的逻辑代码jar包。hive/lib
目录中。hive/.hiverc
中或者在启动Hive时使用--auxpath
参数指定了hbase依赖的,需要把加载的jar包换成新的alihbase开头的JAR包。参见连接集群,使用地址中Java API访问地址,如果是公网访问,请使用公网域名。
参见连接集群,默认的用户名为root,密码为root。或者在集群管理页面中关闭ACL功能后,无需再提供用户名密码。
所有访问HBase的Hive机器的IP,必须加入HBase集群的白名单中,否则无法访问,添加白名单请参考访问白名单。
在Hive中配置连接HBase的参数有两种方式,一种是直接配置在hive-site.xml
文件中。在这个文件中加入如下配置项:
<configuration>
<!--
集群的连接地址,在控制台页面的数据库连接界面获得(注意公网地址和VPC内网地址)
-->
<property>
<name>hbase.zookeeper.quorum</name>
<value>ld-xxxx-proxy-hbaseue.hbaseue.xxx.rds.aliyuncs.com:30020</value>
</property>
<!--
设置用户名密码,默认root:root,可根据实际情况调整
-->
<property>
<name>hbase.client.username</name>
<value>root</value>
</property>
<property>
<name>hbase.client.password</name>
<value>root</value>
</property>
</configuration>
另一种方式是在Hive的Client中直接用命令的方式配置:
set hbase.zookeeper.quorum=ld-xxxx-proxy-hbaseue.hbaseue.xxx.rds.aliyuncs.com:30020
set hbase.client.username=root
set hbase.client.password=root
当完成这些配置后,就可以在Hive中自由地使用HBase外表。
如果HBase表不存在,可在Hive中直接创建云HBase关联表。
CREATE TABLE hive_hbase_table(key int, value string)
STORED BY 'org.apache.hadoop.hive.hbase.HBaseStorageHandler'
WITH SERDEPROPERTIES ("hbase.columns.mapping" = ":key,cf1:val")
TBLPROPERTIES ("hbase.table.name" = "hive_hbase_table", "hbase.mapred.output.outputtable" = "hive_hbase_table");
insert into hive_hbase_table values(212,'bab');
在Hive中查看:
Hive删除表,HBase表也删除。
查看Hbase表,报错不存在表。
如果HBase表已存在,可在Hive中HBase外表进行关联,外部表在删除时不影响HBase已创建表
删除Hive表不影响HBase已存在表。
Hive更多操作HBase步骤,可参见https://cwiki.apache.org/confluence/display/Hive/HBaseIntegration
目前暂不支持Hive关联HBase增强版的Snapshot来直接读取HFile文件。如果是采用关联/创建外表的方式读写是完全兼容的。
在文档使用中是否遇到以下问题
更多建议
匿名提交