У меня есть два работающих контейнера для 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.
Если вам нужна дополнительная информация, я отредактирую ее дальше.
Пожалуйста, скажите мне несколько идей.