无法从java应用程序远程连接HBase

无法从java应用程序远程连接HBase,hbase,Hbase,我已经在Linux机器(192.168.113.27)上安装了HBase,现在我已经在Windows机器上的Eclipse IDE中编写了一些示例代码,使用JAVA API与Linux机器上的HBase通信。我已经在Linux机器上的HBase上创建了“用户”表 客户端连接到zookeeper,如下面的日志所述:之后,我得到异常“没有为用户找到区域表”。为了解决这个问题,我读了很多文章,尝试了很多方法,但都无法解决 我曾尝试在/conf/regionserver中将本地主机更改为Linux机器I

我已经在Linux机器(192.168.113.27)上安装了HBase,现在我已经在Windows机器上的Eclipse IDE中编写了一些示例代码,使用JAVA API与Linux机器上的HBase通信。我已经在Linux机器上的HBase上创建了“用户”表

客户端连接到zookeeper,如下面的日志所述:之后,我得到异常“没有为用户找到区域表”。为了解决这个问题,我读了很多文章,尝试了很多方法,但都无法解决

我曾尝试在/conf/regionserver中将本地主机更改为Linux机器IP(192.168.113.27),但仍然收到相同的错误

示例代码:

Configuration conf = HBaseConfiguration.create();
conf.set("hbase.zookeeper.quorum", "192.168.113.27");
conf.set("hbase.zookeeper.property.clientPort","2181");

HTableInterface usersTable = new HTable(conf, "users");
客户端上的日志:

13/02/06 10:58:32信息zookeeper.ClientCnxn:会话建立 在服务器192.168.113.27/192.168.113.27:2181上完成,sessionid= 0x13cae4bd91b0003,协商超时=40000

这意味着已经和动物园管理员建立了联系

此外,还没有为“用户”表找到任何区域

org.apache.hadoop.hbase.client.NoServerForRegionException:无法 尝试10次后查找用户的区域,9999999999。 位于org.apache.hadoop.hbase.client.HConnectionManager$HConnectionImplementation.locateRegionMeta(HConnectionManager.java:951) 位于org.apache.hadoop.hbase.client.HConnectionManager$HConnectionImplementation.locateRegion(HConnectionManager.java:856) 位于org.apache.hadoop.hbase.client.HConnectionManager$HConnectionImplementation.locateRegionMeta(HConnectionManager.java:958) 位于org.apache.hadoop.hbase.client.HConnectionManager$HConnectionImplementation.locateRegion(HConnectionManager.java:860) 位于org.apache.hadoop.hbase.client.HConnectionManager$HConnectionImplementation.locateRegion(HConnectionManager.java:817) 位于org.apache.hadoop.hbase.client.HTable.finishSetup(HTable.java:234) 位于org.apache.hadoop.hbase.client.HTable.(HTable.java:174) 位于org.apache.hadoop.hbase.client.HTable.(HTable.java:133) 位于com.samsung.HBase.DBMain.putData(DBMain.java:32)


我想我记得这样的事情。如果我没记错的话,这与Zookeper返回一个私有IP地址有关

在客户端HBase配置中,应该让
HBase.rootdir
指向IP地址而不是主机名

<configurtion>
    <property>
         <name>hbase.rootdir</name>
         <value>hdfs://<IP address>:<port>/<HBase location>/</value>
    </property>
</configuration>

hbase.rootdir
hdfs://://

是的,我也有这个问题。花了一段时间才弄明白

如果您进入HBase HConnectionManager代码,您将看到调用此方法

   HRegionInterface getHRegionConnection(final String hostname, final int port,
确保主机名参数的值映射到有效的IP地址

例如,在我的例子中,我的本地网络上有一台主机名为“ubuntu”的本地hbase服务器,但我测试hbase客户端的机器在Windows7主机文件中没有主机名“ubuntu”的有效映射IP地址

将此条目添加到我的windows 7主机文件解决了此问题

192.168.0.101   ubuntu