未建立连接

axr492tv  于 2021-06-03  发布在  Hadoop
关注(0)|答案(1)|浏览(292)

我有两个运行的flume和hadoop容器。让它成为hadoop2和flume2。我从两个图像创建了这两个容器,分别是hadoop和flume。

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 条目。hadoop服务和 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

更改后我重新启动了hadoop namenode `core-site.xml` .
我试着用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:连接被拒绝
所以我发现这两个contianer之间的连接有问题。我进入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。
如果你需要更多信息,我会进一步编辑。
请告诉我一些想法。
pepwfjgg

pepwfjgg1#

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

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].

我希望它能对那些试图链接集装箱和港口Map的人有所帮助。

相关问题