2014-12-23 1 views
1

Я реализую небольшой кластер для кластеров для POC в моей компании. Я пытаюсь импортировать файлы в HDFS с Flume. Каждый файл содержит JSON объекты, как это («длинный» линии 1 на файл):Перемещение файлов из каталога буферизации в HDFS с помощью флюма

{ "objectType" : [ { JSON Object } , { JSON Object }, ... ] } 

«OBJECTTYPE» тип объектов в массиве (например: события, пользователи, ...).

Эти файлы будут обработаны позже несколькими задачами в зависимости от объекта «objectType».

Я использую источник spoolDir и раковину HDFS.

Мои вопросы:

  • Можно ли сохранить имя исходного файла при желобе записи в HDFS (имена файлов являются уникальными, поскольку они содержат метку времени и UUID в названии)

  • Is есть способ установить «deserializer.maxLineLength» на неограниченное значение (вместо установки большого значения)?

  • Я действительно не хочу потерять данные. Какой канал является лучшим, JDBC или File? (Я не поток с высокой пропускной способностью)

Мое ограничение в том, что я должен использовать желоб вне коробки (без пользовательских элементов) как можно больше.

Благодарим за помощь!

ответ

1

Можно ли сохранить имя исходного файла при записи в желобе HDFS (имена файлов являются уникальными, поскольку они содержат метку времени и UUID в названии)

Да. С источником spooldir убедитесь, что для атрибута fileheader установлено значение true. Это будет имя файла с записью.

agent-1.sources.src-1.fileHeader = true 

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

agent-1.sinks.snk-1.serializer = avro_event 

Запись в формате avro соответствует этой схеме. https://github.com/apache/flume/blob/trunk/flume-ng-core/src/main/java/org/apache/flume/serialization/FlumeEventAvroEventSerializer.java#L30

Есть ли способ, чтобы установить «deserializer.maxLineLength» неограниченное значение (вместо высокого значения)?

Для deserializer.maxLineLength нет неограниченной конфигурации. https://github.com/apache/flume/blob/trunk/flume-ng-core/src/main/java/org/apache/flume/serialization/LineDeserializer.java#L143

Я действительно dn't хочу потерять данные. Какой канал является лучшим, JDBC или File?(Я не поток с высокой пропускной способностью)

Это, вероятно, будет зависеть от возможностей обеспечения устойчивости у вас есть для вашей базы данных или файловой системы. Если у вас резервная база данных с резервным копированием, то JDBC. Если у вас есть надежная файловая система, которая устойчива, тогда перейдите к файлу.

 Смежные вопросы

  • Нет связанных вопросов^_^