Я пытаюсь настроить Flume так, чтобы журналы катились ежечасно или когда они достигают размера блока по умолчанию HDFS (64 МБ). Ниже моя текущая конфигурация:

imp-agent.channels.imp-ch1.type = memory
imp-agent.channels.imp-ch1.capacity = 40000
imp-agent.channels.imp-ch1.transactionCapacity = 1000

imp-agent.sources.avro-imp-source1.channels = imp-ch1
imp-agent.sources.avro-imp-source1.type = avro
imp-agent.sources.avro-imp-source1.bind = 0.0.0.0
imp-agent.sources.avro-imp-source1.port = 41414

imp-agent.sources.avro-imp-source1.interceptors = host1 timestamp1
imp-agent.sources.avro-imp-source1.interceptors.host1.type = host
imp-agent.sources.avro-imp-source1.interceptors.host1.useIP = false
imp-agent.sources.avro-imp-source1.interceptors.timestamp1.type = timestamp

imp-agent.sinks.hdfs-imp-sink1.channel = imp-ch1
imp-agent.sinks.hdfs-imp-sink1.type = hdfs
imp-agent.sinks.hdfs-imp-sink1.hdfs.path = hdfs://mynamenode:8020/flume/impressions/yr=%Y/mo=%m/d=%d/logger=%{host}s1/
imp-agent.sinks.hdfs-imp-sink1.hdfs.filePrefix = Impr
imp-agent.sinks.hdfs-imp-sink1.hdfs.batchSize = 10
imp-agent.sinks.hdfs-imp-sink1.hdfs.rollInterval = 3600
imp-agent.sinks.hdfs-imp-sink1.hdfs.rollCount = 0
imp-agent.sinks.hdfs-imp-sink1.hdfs.rollSize = 66584576

imp-agent.channels = imp-ch1
imp-agent.sources = avro-imp-source1
imp-agent.sinks = hdfs-imp-sink1

Мое намерение с конфигурацией выше состоит в том, чтобы записывать в HDFS партиями по 10, а затем перематывать файл, который записывается, ежечасно. Я вижу, что все данные, по-видимому, хранятся в памяти до тех пор, пока у меня не окажется меньше 64 МБ, пока файлы не скатятся через 1 час. Есть ли какие-то настройки, которые мне нужно изменить, чтобы добиться желаемого поведения?

4
Mad Dog 14 Май 2013 в 20:31
Что вы имеете в виду, говоря «Я вижу, что все данные, кажется, хранятся в памяти до тех пор, пока у меня не будет меньше 64 МБ, пока файлы не скатятся через 1 час». ? Если вы ожидали увидеть частичные файлы в HDFS (то есть увидеть первые 10 событий до того, как файл будет развернут), то это невозможно, потому что HDFS не поддерживает добавление к файлам. Параметры BatchSize просто намекают на количество событий, которые необходимо собрать, прежде чем отправлять их в HDFS по сети. Сообщите мне, если это ваша проблема, и я постараюсь лучше объяснить в ответе.
 – 
Cihan Keser
21 Май 2013 в 14:47
Насколько я понимаю, HDFS действительно поддерживает добавление, начиная с версии 0.20.x. Это дополнительная конфигурация. Вдобавок ко всему, я почти уверен, что Flume предпринимает некоторые действия для открытия файла в HDFS и отправки некоторых событий без закрытия файла.
 – 
Mad Dog
14 Июн 2013 в 04:40
1
«Я вижу, что все данные хранятся в памяти» - Как вы это определяете? Обратите внимание, что незавершенные файлы в HDFS, будучи открытыми, часто могут сообщать о длине 0, даже если в них есть записываемый блок.
 – 
Harsh J
10 Ноя 2013 в 22:42

1 ответ

Лучший ответ

Чтобы ответить себе, Flume записывает данные в HDFS партиями. Длина файла сообщается как открытая, потому что блок находится в процессе записи.

0
Mad Dog 27 Ноя 2013 в 23:10