HBASE错误:设置代理接口org.apache.hadoop.hbase.ipc.HRegionInterface失败

时间:2012-01-11 11:15:35

标签: java hadoop jdo hbase datanucleus

我目前正在尝试使用HDFS和HBASE。 Hadoop和HBASE已正确安装在计算机上,并且我的应用程序在托管在同一台计算机上时可以正常运行。

但是在另一台机器上托管时。在第一次打到HBASE时,我收到一条错误消息:

org.apache.catalina.core.StandardWrapperValve invoke
SEVERE: Servlet.service() for servlet [sitepulsewebsite] in context with path [/SitePulseWeb] threw exception [Request processing failed; nested exception is javax.jdo.JDODataStoreException
NestedThrowables:org.apache.hadoop.hbase.MasterNotRunningException: localhost:60000] with root cause
org.apache.hadoop.hbase.MasterNotRunningException: localhost:60000

在第二次打击时,我得到了例外:

org.apache.catalina.core.StandardWrapperValve invoke
SEVERE: Servlet.service() for servlet [sitepulsewebsite] in context with path [/SitePulseWeb] threw exception [Request processing failed; nested exception is javax.jdo.JDODataStoreException: Failed setting up proxy interface org.apache.hadoop.hbase.ipc.HRegionInterface to localhost/127.0.0.1:60020 after attempts=1
NestedThrowables: org.apache.hadoop.hbase.client.RetriesExhaustedException: Failed setting up proxy interface org.apache.hadoop.hbase.ipc.HRegionInterface to localhost/127.0.0.1:60020 after attempts=1] with root cause
java.net.ConnectException: Connection refused

我的hbase-site.xml如下所示:

<configuration>
<property>
    <name>hbase.rootdir</name>
    <value>hdfs://master:54310/hbase </value>
    <description>
        The directory shared by region servers. Should be
        fully-qualified to
        include the filesystem to use. E.g:
        hdfs://NAMENODE_SERVER:PORT/HBASE_ROOTDIR

    </description>

</property>

<property>
    <name>hbase.cluster.distributed</name>
    <value>true</value>
    <description>The mode the cluster will be in. Possible values are
        false: standalone and pseudo-distributed setups with managed
        Zookeeper
        true: fully-distributed with unmanaged Zookeeper Quorum (see
        hbase-env.sh)
    </description>
</property>
<property>
    <name>hbase.zookeeper.quorum</name>
    <value>master</value>
    <description>Comma separated list of servers in the ZooKeeper Quorum.
        If HBASE_MANAGES_ZK is set in hbase-env.sh this is the list of
        servers which we will start/stop ZooKeeper on.
    </description>
</property>
<property>
    <name>hbase.master</name>
    <value>master:60010</value>
</property>
<property>
    <name>hbase.zookeeper.property.clientPort</name>
    <value>2181</value>
</property></configuration>

更新日志

查看我的Java应用程序创建的日志(DEBUG级别),我找到了以下日志:

1 2012-01-12 17:12:13,328 DEBUG Thread-1320 org.apache.hadoop.ipc.HBaseClient - IPC Client (47) connection to localhost/127.0.0.1:60020 from an unknown user: closed
2 2012-01-12 17:12:13,328 INFO Thread-1320 org.apache.hadoop.ipc.HbaseRPC - Server at localhost/127.0.0.1:60020 could not be reached after 1 tries, giving up.
3 2012-01-12 17:12:13,328 DEBUG Thread-1320 org.apache.hadoop.hbase.client.HConnectionManager$HConnectionImplementation - locateRegionInMeta parentTable=-ROOT-, metaLocation=address: localhost:60020, regioninfo: -ROOT-,,0.70236052, attempt=0 of 10 failed; retrying after sleep of 1000 because: Failed setting up proxy interface org.apache.hadoop.hbase.ipc.HRegionInterface to localhost/127.0.0.1:60020 after attempts=1
4 2012-01-12 17:12:13,328 DEBUG Thread-1320 org.apache.hadoop.hbase.client.HConnectionManager$HConnectionImplementation - Lookedup root region location, connection=org.apache.hadoop.hbase.client.HConnectionManager$HConnectionImplementation@9d1e83; hsa=localhost:60020
5 2012-01-12 17:12:13,736 DEBUG Thread-1268 org.apache.hadoop.hbase.client.HConnectionManager$HConnectionImplementation - Lookedup root region location, connection=org.apache.hadoop.hbase.client.HConnectionManager$HConnectionImplementation@9d1e83; hsa=localhost:60020
6 2012-01-12 17:12:13,736 DEBUG Thread-1268 org.apache.hadoop.ipc.HBaseClient - Connecting to localhost/127.0.0.1:60020
7 2012-01-12 17:12:13,737 DEBUG Thread-1268 org.apache.hadoop.ipc.HBaseClient - closing ipc connection to localhost/127.0.0.1:60020: Connection refused
8 java.net.ConnectException: Connection refused
当映射从

更改时,

在/ etc / hosts文件
127.0.0.1 localhost

<my_server_IP> localhost

我的申请表现非常好。因此,我需要一些方法来告诉应用程序连接到所需的主机名而不是localhost。

我试过调试它,没有任何成功。

4 个答案:

答案 0 :(得分:6)

我不知道这是否是您的问题,但如果您没有从同一主机访问所有内容,则使用localhost通常会出现问题。

所以不要使用localhost!

一般不要更改localhost的定义。 Localhost是默认的127.0.0.1。

您将hbase.rootdir定义为hdfs:// master:54310 / hbase,将hbase.zookeeper.quorum定义为master。

什么是主人?它应该是主机主要以太网接口的完全限定域名。该接口的IP地址的反向DNS应解析为您填写到这些字段的相同FQDN。 (或者,如果你无法控制反向dns,只需使用原始IP地址)

确保您的HDFS配置也使用相同的FQDN或IP地址或同步/ etc / hosts文件。同步/ etc / hosts文件应该确保正向和反向DNS是相同的,只要所有主机(所有HDFS和HBase和您的客户端)使用相同的/ etc / hosts并且没有覆盖/ etc的操作系统内容/主机。一般来说,我不喜欢用/ etc / hosts做任何事情。它最终会咬你。

然后,您的远程客户端应通过相同的FQDN或IP地址访问您的HBase主服务器。

我发现这种DNS问题会引起相当多的混乱。

如果您需要进行现实检查,只需在任何地方使用IP地址,直到您完成它为止。然后尝试使用完全限定域名或同步/ etc / hosts文件。

答案 1 :(得分:4)

我在 /etc/hosts

中有类似的内容
127.0.0.1   localhost
127.0.1.1   <hostname>

我将其更改为解决<hostname>127.0.0.1,这似乎解决了问题。

127.0.0.1   localhost <hostname>

答案 2 :(得分:1)

非常感谢@Robert J Berger带领我回答同一个问题。我没有问题#1,但我遇到问题#2,服务器报告:

Failed setting up proxy interface org.apache.hadoop.hbase.ipc.HRegionInterface to localhost/127.0.0.1:60020 after attempts=1

然而,他的回答是关注'主'方面,所以我想我会用他自己的答案扩展他的。我的DNS(由群集中的所有计算机使用)解析'master',因此客户端与服务器的连接不是问题(无论'master'是仅主机名,而不是FQDN,都在工作)。 [我同意罗伯特认为,避免/ etc / hosts修改最终是最易维护的解决方案。]

我的问题是服务器连接到客户端。 Hbase正在使用机器的主机名来解析IP以将内部通信绑定到,并且事实证明我已经在master上正确设置了这个设置而不是节点。

这是由于/ etc / hosts文件是如何在发布时在regionserver节点上构建的。当我更改每个节点上的/ etc / hosts时,hbase服务器错误消失了:

127.0.0.1    node-hostname

为:

<actual ip>  node-hostname

现在Hbase服务器正确地看到了节点,并且可以为每个节点构建代理。

答案 3 :(得分:0)

执行以下命令

sudo hostname thehostnameyouwanttogiveformachine

编辑/ etc / hosts文件

actual-ip thehostnameyouwanttogiveformachine

重启机器

并检查