从主机VM外部连接到在Docker容器中运行的HDFS Namenode

时间:2019-08-24 20:26:07

标签: docker hdfs hbase namenode datanode

我有一个HBase + HDFS设置,其中每个HBase主服务器,区域服务器,HDFS名称节点和数据节点都被容器化。

在单个主机VM上运行所有这些容器时,一切正常,因为我可以直接使用docker容器名称,并将配置变量设置为:

CORE_CONF_fs_defaultFS: hdfs://namenode:9000

对于regionserver和datanode。系统在此配置下可以正常工作。

但是,当尝试在多个主机VM上分发它们时,我遇到了问题。

我将上面的配置变量更新为:

CORE_CONF_fs_defaultFS: hdfs://hostname:9000

并确保namenode容器公开了端口9000,并将其映射到主机的端口9000。

使用主机名时,名称似乎无法正确解析,并且在datanode日志中看到的错误如下:

2019-08-24 05:46:08,630 INFO impl.FsDatasetAsyncDiskService: Deleted BP-1682518946-<ip1>-1566622307307 blk_1073743161_2337 URI file:/hadoop/dfs/data/current/BP-1682518946-<ip1>-1566622307307/current/rbw/blk_1073743161
2019-08-24 05:47:36,895 INFO datanode.DataNode: Receiving BP-1682518946-<ip1>-1566622307307:blk_1073743166_2342 src: /<ip3>:48396 dest: /<ip2>:9866
2019-08-24 05:47:36,897 ERROR datanode.DataNode: <hostname>-datanode:9866:DataXceiver error processing WRITE_BLOCK operation  src: /<ip3>:48396 dst: /<ip2>:9866
java.nio.channels.UnresolvedAddressException
    at sun.nio.ch.Net.checkAddress(Net.java:101)
    at sun.nio.ch.SocketChannelImpl.connect(SocketChannelImpl.java:622)
    at org.apache.hadoop.net.SocketIOWithTimeout.connect(SocketIOWithTimeout.java:192)
    at org.apache.hadoop.net.NetUtils.connect(NetUtils.java:531)
    at org.apache.hadoop.net.NetUtils.connect(NetUtils.java:495)
    at org.apache.hadoop.hdfs.server.datanode.DataXceiver.writeBlock(DataXceiver.java:786)
    at org.apache.hadoop.hdfs.protocol.datatransfer.Receiver.opWriteBlock(Receiver.java:173)
    at org.apache.hadoop.hdfs.protocol.datatransfer.Receiver.processOp(Receiver.java:107)
    at org.apache.hadoop.hdfs.server.datanode.DataXceiver.run(DataXceiver.java:290)
    at java.lang.Thread.run(Thread.java:748)

<hostname>-datanode是数据节点容器的名称,而IP是各种容器IP。

我想知道是否遗漏了一些配置变量,该变量会让其他VM的容器连接到名称节点,或者是否进行了其他一些更改,以使此系统能够正确分发。我想知道系统是否期望以某种方式命名容器。

0 个答案:

没有答案