Flume не пишет в HDFS, если не убит

я следовал ссылке для настройки TwitterSource и HDFS раковина.

команда, используемая для запуска агента:

bin/flume-ng agent -n TwitterAgent -c conf -f conf/flume-conf.properties -Dflume.root.logger=DEBUG,console

мне это удалось, но теперь есть одна проблема. Выходные данные не записываются до остановки агента flume. Он записывается в HDFS, как только я убиваю своего агента flume.

у меня есть два вопроса здесь:

1) Как остановить агент flume-есть ли другой способ, кроме как делать Сочетание клавиш Ctrl+С.

2) Могу ли я заставить Flume-agent писать в HDFS на ходу, без необходимости убивать агента.

Примечание : после убийства процесса, файл, который написан был .tmp в качестве расширения. Это ожидаемо?

EDIT:

TwitterAgent.sinks.HDFS.hdfs.rollSize = 0
TwitterAgent.sinks.HDFS.hdfs.rollCount = 10000
TwitterAgent.sinks.HDFS.hdfs.rollInterval = 600

2 ответов


сколько данных записывается? Держу пари, что он не пишет, потому что вы не собрали достаточно, чтобы вызвать флеш в HDFS с параметрами конфигурации по умолчанию. Есть количество способов настройки приемника HDFS так что он смывается предсказуемым образом. Вы можете установить его так, чтобы он сбрасывался на несколько событий (hdfs.rollCount), на интервале (hdfs.rollInterval) или по размеру (hdfs.rollSize). Что происходит, когда вы убиваете агента, он очищает то, что он делает в настоящее время и вспыхивает... так что, по сути, вы принуждаете его, убивая его.

вы также можете попробовать понижая hdfs.batchSize.

помните, что Hadoop любит большие файлы. Вы должны стараться избегать большого количества небольших файлов, в целом. Так что будь осторожен здесь, когда катаешься слишком часто.


запуск его на переднем плане, как вы, ctrl+c или kill-единственные реальные способы остановить его. В производстве вы, вероятно, должны использовать сценарии init, которые имеют start/stop/restart.


спасибо Дональд и Правин:

я мог бы решить проблему, установив следующее в моем файле flume-conf

TwitterAgent.sinks.HDFS.hdfs.batchSize = 1000
TwitterAgent.sinks.HDFS.hdfs.rollSize = 0
TwitterAgent.sinks.HDFS.hdfs.rollCount = 10000

и удалив эту запись

TwitterAgent.sinks.HDFS.hdfs.rollInterval = 600

теперь flume пишет в HDFS на ходу.