我有一个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,或者缺少一些其他的更改,这些更改允许正确地分发这个系统。例如,我想知道系统是否希望容器以某种方式命名。
暂无答案!
目前还没有任何答案,快来回答吧!