hadoop - hbase伪分布式远程连接

标签 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 不会绑定(bind)到远程地址。如果 HDFS 绑定(bind)到本地并且工作,如果 hbase 在 hbase-site 中被赋予远程一个,则 hbase 将不会连接(ip 和端口转发肯定工作,使用 telnet 检查)。 我玩弄/etc/hosts - 无论 ping -c 1 $(hostname) 返回本地地址还是远程地址,HDFS 和 HBase 都仅在绑定(bind)到本地时启动。

我还尝试通过在 hbase-site.xml 中设置 hbase.master.port 来解决问题 #2 - 不管我设置什么,HBase 主服务器绑定(bind)到一个随机端口。

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

最佳答案

这种情况下的常见问题是您希望可以从 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 代理服务器上遇到瓶颈。

关于hadoop - hbase伪分布式远程连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9012111/

相关文章:

hadoop - 只有三分之一的数据节点在 Hadoop 中启动?

hadoop 映射溢出大小和 block 大小

hadoop - Spark-任务异常

hadoop - "HDFS lacks random read and write access"是什么意思?

hadoop - 为 HDFS 目录中的文件创建 HBase 表

java - "hadoop namenode -format"返回 java.net.UnknownHostException

apache-spark - 如何合并 Spark SQL 查询的结果以避免出现大量小文件/避免空文件

apache-spark - 我只想将数据用于 spark 那么哪种文件格式最适合 hive?

mysql - Hive 的 hour() 函数返回 12 小时时钟值

java - 使用 HBase 获取数据以使用 Mahout 计算文本相似度