Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/hadoop/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Hadoop hbase伪分布式远程连接_Hadoop_Hbase_Hdfs - Fatal编程技术网

Hadoop hbase伪分布式远程连接

Hadoop hbase伪分布式远程连接,hadoop,hbase,hdfs,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 =

我已经设置了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站点中提供了远程hbase,则hbase将不会连接(ip和端口转发确实工作,请通过telnet检查)。 我使用了/etc/hosts,无论
ping-c1$(主机名)
是否返回本地或远程地址,HDFS和HBase都只在绑定到本地时启动

我还尝试通过在hbase-site.xml中设置hbase.master.port来解决问题#2-无论我设置了什么,hbase master server都会绑定到一个随机端口


我已经浪费了大量的时间来尝试正确的方法,检查了所有可能的来源,并尝试了所有可能的组合。

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

当客户端连接到HBase时,发生的第一件事是它们连接到ZooKeeper,以确定它们要查找的表所在的计算机(或者,如果您正在执行管理操作,则确定当前主机是哪台计算机,这里似乎就是这种情况)

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

使HBase通过NAT工作的唯一合理方法是通过代理传递所有外部请求。有两种选择——节俭和休息。有关代理的更多信息,请参见:


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

这样我们才能正确理解拓扑结构,请纠正错误:您的工作站上有一个Java应用程序,您正试图从该应用程序通过路由器连接到远程网络上的HBase安装。请更正。我是不是遗漏了什么?我正在使用Clouderas的最新版本。感谢您的帮助。我的用例非常独特,这就是为什么我需要这样的功能。我也有同样的问题,你能告诉我解决这个问题的步骤吗。