Соединение не устанавливается

У меня есть два работающих контейнера для 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

Я захожу в контейнер лотка и проверяю записи env и etc/hosts. Существует запись для hadoopservices, и env переменных создаются автоматически.

My 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

Я перезапустил namenode hadoop после изменения core-site.xml.

Я пытаюсь записать в hdfs из Flume, используя

/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 — это IP-адрес моего контейнера Hadoop.

Я нашел причину. Это причина?

Какую конфигурацию следует изменить? И или мое заявление о запуске? Что нужно изменить, чтобы установить соединение между этими двумя док-контейнерами, чтобы я мог записывать в hdfs из Flume.

Если вам нужна дополнительная информация, я отредактирую ее дальше.

Пожалуйста, скажите мне несколько идей.


person Gibbs    schedule 18.02.2015    source источник


Ответы (1)


Если кто-то столкнулся с такой же проблемой, пожалуйста, выполните следующие действия.

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

Я надеюсь, что это будет полезно для людей, которые пытаются связать контейнеры и сопоставление портов.

person Gibbs    schedule 18.02.2015