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

时间:2013-02-06 16:16:54

标签: hbase

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

客户端已连接到zookeeper,如下面的日志中所述:之后我收到异常“找不到用户表的区域”。为了解决这个问题,我已经阅读了各种各样的线程,并尝试了各种各样的东西但无法解决它。

我尝试过在/ conf / regionservers中将本地主机更改为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 INFO zookeeper.ClientCnxn:会话建立   在服务器192.168.113.27/192.168.113.27:2181上完成,sessionid =   0x13cae4bd91b0003,协商超时= 40000

这意味着与zookeeper的连接已经完成。

此外,Excetion已找到“用户”表中没有找到区域。

  

org.apache.hadoop.hbase.client.NoServerForRegionException:无法   10次​​尝试后,为用户找到区域,99999999999999。           at org.apache.hadoop.hbase.client.HConnectionManager $ HConnectionImplementation.locateRegionInMeta(HConnectionManager.java:951)           at org.apache.hadoop.hbase.client.HConnectionManager $ HConnectionImplementation.locateRegion(HConnectionManager.java:856)           at org.apache.hadoop.hbase.client.HConnectionManager $ HConnectionImplementation.locateRegionInMeta(HConnectionManager.java:958)           at org.apache.hadoop.hbase.client.HConnectionManager $ HConnectionImplementation.locateRegion(HConnectionManager.java:860)           at 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)

2 个答案:

答案 0 :(得分:2)

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

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

   HRegionInterface getHRegionConnection(final String hostname, final int port,

确保hostname参数的值映射到VALID IP地址。

例如,在我的情况下,我的本地网络上有一个主机名为“ubuntu”的本地hbase服务器,但我测试hbase客户端的机器没有主机名“ubuntu”的有效映射IP地址Windows 7托管文件。

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

192.168.0.101   ubuntu

答案 1 :(得分:0)

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

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

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