hbase伪分布式远程连接

时间:2012-01-25 23:43:52

标签: hadoop hbase hdfs

我有HBase& HDFS设置并以伪分布式模式工作(在Mac OSX上)。我还有一个简单的Java应用程序。它在本地使用时有效。 我想让它远程工作。服务器隐藏在路由器后面,所有必要的端口都已转发。

当我尝试远程连接时,我得到:

...
12/01/25 23:21:15 INFO zookeeper.ClientCnxn: Session establishment complete on server 
remote.host.com/remoteip:53058, sessionid = 0x13516f179a30005, negotiated timeout = 40000
12/01/25 23:21:36 INFO client.HConnectionManager$HConnectionImplementation: getMaster attempt 
0 of 10 failed; retrying after sleep of 1000
java.net.SocketTimeoutException: 20000 millis timeout while waiting for channel to be ready for connect. ch : java.nio.channels.SocketChannel[connection-pending remote=192.168.52.53/192.168.52.53:58023]

对我来说意味着Zookeeper连接但是给客户端错误的地址: 1)因为它的本地 2)因为它在错误的端口上

我尝试通过在HDFS core-site.xml(fs.default.name)和hbase-site.xml(hbase.rootdir)中设置远程地址来修复问题#1。 HDFS不会绑定到远程地址。如果HDFS被绑定到本地并正常工作,如果在hbase-site中给出远程的HDDC,则hbase将不会连接(ip和端口转发正在工作,用telnet检查)。 我玩/ etc / hosts - 无论ping -c 1 $(hostname)是否返回本地或远程地址,HDFS和& HBase仅在绑定到本地时启动。

我还尝试通过在hbase-site.xml中设置hbase.master.port来修复问题#2 - 无论我设置什么,HBase主服务器绑定到随机端口。

我浪费了大量时间试图做到这一点,检查所有可能的来源并尝试了所有可能的组合。

1 个答案:

答案 0 :(得分:1)

这种情况下的常见问题是您希望可以通过NAT防火墙外部的单个IP地址访问HBase。虽然这可能是可能的,但很难设置,几乎肯定不支持。

当客户端连接到HBase时,首先发生的事情是他们连接到ZooKeeper以确定哪台机器托管他们正在查找的表(或者哪台机器是当前的Master,如果您正在执行管理操作,这似乎就是这里的情况)。

然后客户端直接连接到远程计算机。如果远程计算机(特别是HBase RegionServers)位于NAT路由器后面并使用其内部IP向ZooKeeper报告自己,则路由器外部的计算机无法解析防火墙内部的RegionServer的IP。

使HBase通过NAT工作的唯一合理方法是通过代理引导所有外部请求。有两个选项 - Thrift和REST。关于代理的更多内容:http://ofps.oreilly.com/titles/9781449396107/clients.html

顺便提一下,您几乎从不想要这种设置 - 所有客户端计算机都应该能够直接与RegionServers通信,这样您就不会在HBase代理服务器上遇到瓶颈。

相关问题