hbase单机模式下,使用java API远程连接hbase的问题。
左潇龙
博客专家认证 2014-06-01 05:50:05 最近需要使用hbase作为数据库,所以想自己研究下hbase。不过最近遇到一个问题,很多天也没找到答案。
首先描述一下我的机子。普通的PC机,系统为win7,在win7里装了个虚拟机,运行ubuntu10,虚拟机里装了hadoop和hbase,两者全部运行成功,使用hbase shell和在虚拟机里使用JAVA API操作hbase都没问题。
但是问题就是我想直接使用PC机中的JAVA API(也就是win7)直接操作虚拟机里的hbase,就怎么都不行了。
贴上我的配置。
hbase-site.xml大致如下
<property>
<name>hbase.cluster.distributed</name>
<value>false</value>
</property>
<property>
<name>hbase.tmp.dir</name>
<value>/opt/tmp</value>
</property>
<property>
<name>hbase.rootdir</name>
<value>hdfs://192.168.235.134:9000/hbase</value>
</property>
<property>
<name>hbase.zookeeper.quorum</name>
<value>192.168.235.134</value>
</property>
/etc/hosts大致如下
192.168.235.134 localhost ubuntu
# The following lines are desirable for IPv6 capable hosts
::1 localhost ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
ff02::3 ip6-allhosts
PC机(即win7上)的JAVA API中的hbase-site.xml大致如下
<property>
<name>hbase.cluster.distributed</name>
<value>false</value>
</property>
<property>
<name>hbase.rootdir</name>
<value>hdfs://192.168.235.134:9000/hbase</value>
</property>
<property>
<name>hbase.zookeeper.quorum</name>
<value>192.168.235.134</value>
</property>
求hbase大神告知一下这是什么回事。PC机里JAVA代码大致如下。
HBaseAdmin.checkHBaseAvailable(HBaseConfiguration.create());
错误如下:
org.apache.hadoop.hbase.MasterNotRunningException: com.google.protobuf.ServiceException: java.net.ConnectException: Connection refused: no further information
其实本人跟了源码,发现zookeeper在获取master地址时总返回localhost,问题应该就在这。找不到master,看源码里,是去请求了/hbase/hbaseid这个玩意,这到底是什么东西?
最后再说明一下,虚拟机里的hadoop和hbase都没问题,上面也说了,直接在虚拟机里做什么都可以,只是在win7上远程java连接就不行了。而且我在win7上专门尝试telnet了一堆端口(比如2181、60000,包括rpcserver的随即端口等等),都可以上去。