没有建立连接

时间:2015-02-18 11:19:00

标签: hadoop docker telnet flume netstat

我有两个用于水槽和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

我进入水槽容器并检查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。

我尝试使用

从水槽写入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 个答案:

答案 0 :(得分:0)

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

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

我希望它对尝试链接容器和端口映射的人有所帮助。