未建立连接
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 容器并检查了 env
和 etc/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容器和端口映射的人有所帮助。
我有两个 运行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 容器并检查了 env
和 etc/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容器和端口映射的人有所帮助。