2

我有一个 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)

datanode容器的名称在哪里<hostname>-datanode,IP是各种容器IP。

我想知道我是否遗漏了一些配置变量,可以让其他 VM 的容器连接到 namenode,或者其他一些允许该系统正确分发的更改。例如,我想知道系统是否期望容器以某种方式命名。

4

0 回答 0