2012-01-11 40 views
3

我目前正在对HDFS和HBASE工作。 Hadoop和HBASE已正确安装在机器上,并且我的应用程序托管在同一台机器上时运行良好。HBASE错误:无法设置代理接口org.apache.hadoop.hbase.ipc.HRegionInterface

但是,当在另一台机器上托管。在第一次命中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.h[email protected]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.h[email protected]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 

我的应用程序工作完全正常。因此我需要某种方式告诉应用程序连接到所需的主机名,而不是本地主机

我非常厌倦了调试它没有任何成功。

请帮我解决这个问题。任何形式的帮助将不胜感激。

在此先感谢

+0

所以我很困惑。你解决了这个问题吗?事实证明有几件事导致了这个错误。 – 2012-01-15 16:52:29

+0

不,我没有解决,我无法将本地主机映射到我的服务器的IP地址,因为当应用程序进入生产时,系统上运行的其他应用程序期望localhost将成为自我系统将会中断。 – devsri 2012-01-16 06:53:00

+0

你禁用ipv6吗? – 2012-01-16 15:30:31

回答

6

我不知道这是不是你的问题,但它通常是,如果你不是从同一主机访问一切使用localhost的一个问题。

所以不要使用localhost!

而且一般不用更改本地主机的定义。 Localhost是127.0.0.1的定义。

您定义hbase.rootdir为HDFS://主:54310/HBase的和hbase.zookeeper.quorum为主。

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

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

你的远程客户端应通过相同的FQDN或IP地址来访问您的HBase的主人。

我发现这种DNS问题会引起一些混乱。

如果你需要现实检查,只需使用IP地址,直到你使它工作。然后尝试使用完全限定的域名或同步的/ etc/hosts文件。

+0

谢谢你........这是一个真正的大问题.........现在我该如何处理使用ip而不是主机名的问题。另外,我将hbase配置保持原样,但更改了我的应用程序的hbase-site.xml。什么是解决方案,通常与域名运行....... Thnks – devsri 2012-01-19 10:11:18

+1

其有趣的是,我们正在重新审视这一点,因为我们试图让hbase在Vagrant实例上以伪分布模式运行......事实上hadoop/hbase通过在其接口上执行反向dns查找来解决问题,当您有多个接口或异常虚拟化环境时,会让事情变得混乱。 – 2012-01-19 22:20:24

+1

但是,您应该能够设置/ etc/hosts来命名可用的IP地址。这应该正确地推动正向和反向DNS,假设ip与正在使用的接口相关联。我应该尽快做一些关于流浪者的实验。将回报 – 2012-01-19 22:22:14

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(由群集中的所有机器使用)解析'主',所以客户端连接到服务器不是问题(无论'主'只是主机名而不是'FQDN')。 [我同意W /罗伯特,避免/ etc/hosts的修改最终是最可维护的解决方案。]

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

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

127.0.0.1 node-hostname 

到:

<actual ip> node-hostname 

现在HBase的服务器正确地看到了节点,可以建立代理到每个。

0

执行以下命令

sudo的主机名thehostnameyouwanttogiveformachine

编辑/ etc/hosts文件

实际IP thehostnameyouwanttogiveformachine

重启机器

和检查

3

我在/etc/hosts是这样的:

127.0.0.1 localhost 
127.0.1.1 <hostname> 

我改成了解决<hostname>127.0.0.1而且似乎解决问题。

127.0.0.1 localhost <hostname>