从外部主机vm连接到docker容器中运行的hdfs namenode

3yhwsihp  于 2021-06-09  发布在  Hbase
关注(0)|答案(0)|浏览(266)

我有一个hbase+hdfs设置,其中hbase master、regionserver、hdfs namenode和datanode都是容器化的。
在单个主机vm上运行所有这些容器时,一切正常,因为我可以直接使用docker容器名称,并将配置变量设置为:

CORE_CONF_fs_defaultFS: hdfs://namenode:9000

对于regionserver和datanode。在这种配置中,系统按预期工作。
但是,当尝试在多个主机vm上分发这些时,我遇到了一个问题。
我将上面的配置变量更新为:

CORE_CONF_fs_defaultFS: hdfs://hostname:9000

并确保namenode容器公开了端口9000并将其Map到主机的端口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 是datanode容器的名称,IP是各种容器IP。
我想知道是否缺少一些配置变量,这些变量可以让来自其他vm的容器连接到namenode,或者缺少一些其他的更改,这些更改允许正确地分发这个系统。例如,我想知道系统是否希望容器以某种方式命名。

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题