未建立连接

Connection is not being established

我有两个 运行ning 容器用于 flume 和 hadoop。让它成为 hadoop2 和 flume2。我从两个图像创建了这两个容器,即 hadoop_alone 和 flume_alone.

   docker run -d -p 10.236.173.XX:8020:8020 -p 10.236.173.XX:50030:50030 -p 10.236.173.XX:50060:50060 -p 10.236.173.XX:50070:50070 -p 10.236.173.XX:50075:50075 -p 10.236.173.XX:50090:50090 -p 10.236.173.XX:50105:50105 --name hadoopservices hadoop_alone

我进入 hadoop 容器并检查暴露的端口。所以所有端口都正确暴露。

    docker run -d --name flumeservices -p 0.0.0.0:5140:5140 -p 0.0.0.0:44444:44444 --link hadoopservices:hadoopservices flume_alone

我进入 flume 容器并检查了 envetc/hosts 条目。有一个 hadoopservices 条目,env 变量是自动创建的。

我的core-site.xml

 fs.defaultFS
 hdfs://0.0.0.0:8020

我对其进行了修改,使其在 8020 处接受来自所有容器的服务。

我的源和汇在 flume.conf

 a2.sources.r1.type = netcat
 a2.sources.r1.bind = localhost
 a2.sources.r1.port = 5140

 a2.sinks.k1.type = hdfs
 a2.sinks.k1.hdfs.fileType = DataStream
 a2.sinks.k1.hdfs.writeFormat = Text
 a2.sinks.k1.hdfs.path = hdfs://hadoopservices:8020/user/root/syslog/%y-%m-%d/%H%M/%S
 a2.sinks.k1.hdfs.filePrefix = events
 a2.sinks.k1.hdfs.roundUnit = minute
 a2.sinks.k1.hdfs.useLocalTimeStamp = true

更改core-site.xml后我重启了hadoop namenode。

我尝试使用

从flume写入hdfs
/usr/bin/flume-ng agent --conf-file /etc/flume-ng/conf/flume.conf --name a2 -Dflume.root.logger=INFO,console

它说

INFO hdfs.DFSClient: Exception in createBlockOutputStream

java.net.ConnectException: 连接被拒绝

所以我发现这两个容器之间建立的连接存在问题。我进入 hadoop 容器并检查端口连接

netstat -tna


tcp        0      0 127.0.0.1:52521         127.0.0.1:8020          TIME_WAIT
tcp        0      0 127.0.0.1:8020          127.0.0.1:52516         ESTABLISHED
tcp        0      0 127.0.0.1:52516         127.0.0.1:8020          ESTABLISHED

但我希望它是

tcp        0      0 172.17.1.XX:54342       172.17.1.XX:8020        TIME_WAIT
tcp        0      0 172.17.1.XX:54332       172.17.1.XX:8020        ESTABLISHED
tcp        0      0 172.17.1.XX:8020        172.17.1.XX:54332       ESTABLISHED

其中172.17.1.XX是我的hadoop容器的ip。

我找到了原因。是这个原因吗?

应该修改哪个配置?或者我的 运行 声明?应该更改什么以在这两个 docker 容器之间建立连接,以便我能够从 flume.

写入 hdfs

如果您需要更多信息,我会进一步编辑。

请告诉我一些想法。

如果有人遇到同样的问题,请执行以下步骤。

 1) Check whether 0.0.0.0:8020 is updated in core-site.xml

 2) If you update it inside running container, **I suggest you all to restart ALL the services NOT ONLY namenode**. [better do as part of Dockerfile]

 3) Check for `env` and `etc/hosts` contents in flume container 

 4) And hostname in `etc/hosts` must be matched with the `hdfs path` parameter in flume.conf

 5) Get into hadoop container and do `netstat -tna` and you must see connection established to <hadoop_container_ip>:8020. Not to your localhost[127.0.0.1].

希望对尝试link容器和端口映射的人有所帮助。