【问题标题】:HBASE ERROR: Failed setting up proxy interface org.apache.hadoop.hbase.ipc.HRegionInterfaceHBASE 错误:设置代理接口 org.apache.hadoop.hbase.ipc.HRegionInterface 失败
【发布时间】:2012-01-11 11:15:34
【问题描述】:

我目前正在尝试在 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 应用程序创建的日志(调试级别),我发现了以下日志:

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。

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

【问题讨论】:

  • 所以我很困惑。你解决问题了吗?事实证明,有几件事会导致该错误。
  • 不,我没有解决,我无法将 localhost 映射到我的服务器的 IP,因为当应用程序开始生产时,系统上运行的其他应用程序期望 localhost 是自己的系统将会中断。跨度>
  • 是的,我在两个系统上都禁用了,并且还通过 cat /proc/sys/net/ipv6/conf/all/disable_ipv6 验证,输出为 1

标签: java hadoop jdo hbase datanucleus


【解决方案1】:

我不知道这是否是您的问题,但如果您没有从同一主机访问所有内容,则使用 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 文件。

【讨论】:

  • 非常感谢........这是一个真正的大问题............现在我该如何处理这个使用 ip 而不是主机名的问题。此外,我保留了 hbase 配置,但更改了我的应用程序的 hbase-site.xml。用域名正常运行有什么办法.......谢谢
  • 很有趣,我们正在重新审视这一点,因为我们试图让 hbase 在 Vagrant 实例上以伪分布式模式运行... 事实上 hadoop/hbase 通过反向 dns 查找来解决问题当你有多个接口或不寻常的虚拟化环境时,它的接口会让事情变得混乱..
  • 但是您应该能够在任何地方设置您的 /etc/hosts 来命名有效的 IP 地址。假设 ip 与正在使用的接口相关联,这应该正确驱动正向和反向 DNS。我应该尽快完成一些关于 Vagrant 的实验。将报告回来
【解决方案2】:

我在 /etc/hosts 中遇到过类似的情况:

127.0.0.1   localhost
127.0.1.1   <hostname>

我将其更改为解决 &lt;hostname&gt;127.0.0.1 ,这似乎解决了问题。

127.0.0.1   localhost <hostname>

【讨论】:

    【解决方案3】:

    非常感谢@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,都可以正常工作)。 [我同意 Robert 的观点,即避免 /etc/hosts 修改最终是最可维护的解决方案。]

    我的问题是服务器连接到客户端。 Hbase 正在使用机器的主机名来解析 IP 以绑定内部通信,结果我在 master 上正确设置了这个,但在节点上没有。

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

    127.0.0.1    node-hostname
    

    到:

    <actual ip>  node-hostname
    

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

    【讨论】:

      【解决方案4】:

      执行以下命令

      sudo hostname thehostnameyouwanttogiveformachine

      编辑 /etc/hosts 文件

      actual-ip the hostname you want to give for machine

      重启机器

      然后检查

      【讨论】:

        猜你喜欢
        • 2011-08-25
        • 2022-09-25
        • 1970-01-01
        • 2019-07-08
        • 2018-03-18
        • 1970-01-01
        • 1970-01-01
        • 2018-10-10
        • 1970-01-01
        相关资源
        最近更新 更多