我在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)
答案 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>