Flume для HDFS разделил файл на множество файлов

Я пытаюсь передать файл журнала размером 700 МБ с flume на HDFS. Я настроил агент flume следующим образом:

...
tier1.channels.memory-channel.type = memory
...
tier1.sinks.hdfs-sink.channel = memory-channel
tier1.sinks.hdfs-sink.type = hdfs
tier1.sinks.hdfs-sink.path = hdfs://***
tier1.sinks.hdfs-sink.fileType = DataStream
tier1.sinks.hdfs-sink.rollSize = 0

Источник — spooldir, канал — memory, приемник — hdfs.

Я также пытался отправить файл размером 1 МБ, и Flume разделил его на 1000 файлов, каждый размером 1 КБ. Еще я заметил, что передача была очень медленной, 1 МБ заняло около 1 минуты. Я делаю что-то неправильно?


person itaied    schedule 12.02.2015    source источник


Ответы (1)


Вам также нужно отключить rolltimeout, это делается со следующими настройками:

tier1.sinks.hdfs-sink.hdfs.rollCount = 0
tier1.sinks.hdfs-sink.hdfs.rollInterval = 300

rollcount предотвращает опрокидывание, значение rollIntervall здесь установлено на 300 секунд, установка этого значения на 0 отключит тайм-ауты. Вам нужно будет выбрать, какой механизм вы хотите использовать для ролловеров, иначе Flume закроет файлы только после завершения работы.

Значения по умолчанию следующие:

hdfs.rollInterval   30  Number of seconds to wait before rolling current file (0 = never roll based on time interval)
hdfs.rollSize   1024    File size to trigger roll, in bytes (0: never roll based on file size)
hdfs.rollCount  10  Number of events written to file before it rolled (0 = never roll based on number of events)
person Erik Schmiegelow    schedule 12.02.2015
comment
Спасибо, это работает. Но теперь, после этой конфигурации, я не могу передавать больше файлов. Flume говорит, что он был успешно перенесен, но я не вижу файл в hdfs. Любое предложение? - person itaied; 15.02.2015
comment
Когда Flume записывает события в HDFS, вы всегда будете видеть временный файл в целевом каталоге. Вы можете управлять именем файла с помощью различных пре- и суффиксов. Как только файл будет записан, вы также увидите, что hdfs-sink закрывает его на HDFS. Хорошим началом было бы установить уровень журнала log4j для отладки. - person Erik Schmiegelow; 15.02.2015