2015-01-21 4 views
0

Я использую Flume для объединения небольших файлов Avro (каждый из которых содержит пару событий Avro) в файлы большего размера, которые будут храниться в HDFS. Я использую источник Spool и HDFS-раковину, с Avro Serializer. Каталог My Spool содержит файлы с тремя различными схемами. Можно ли сконфигурировать Flume таким образом, чтобы он объединял файлы Avro с каждой другой схемой в разные файлы раковины?flume с несколькими схемами Avro

Заранее благодарен

ответ

0

Да, на самом деле это так. Фактически на самом деле это лоток, чтобы обернуть ваши объекты Avro в другой контейнерный объект Avro типа Event, состоящий из заголовков и тела. Это тело фактически содержит ваши объекты Avro.

Для того, чтобы иметь эти файлы буферные для различных каталогов в HDFS, вам придется установить заголовки, которые вы можете ссылаться на вашем пути, например:

agent.sinks.hdfs-sink.hdfs.path = hdfs://namenode/%{avro_type}/ 

avro_type быть имя заголовка, установленного ,

Для установки этого заголовка вам необходимо использовать перехватчик. Перехватчик - это специальный класс, который реализует org.apache.flume.interceptor.Interceptor. В методе public Event intercept(Event event) вы определяете тип объекта avro и звоните event.getHeaders().put("avro_type", <something>);

Это в основном это.

+0

Спасибо за ваше замечание Эрик; это было для меня настороже; факт, что тело содержит объект avro. Еще одна вещь, которая стоит упомянуть, - если вы используете AVRO_EVENT как сериализатор в hdfs-приемнике, тогда он фактически напишет весь (внешний) объект avro, а на самом деле вам, вероятно, нужен только внутренний объект avro. Это можно сделать, установив сериализатор в org.apache.flume.sink.hdfs.AvroEventSerializer $ Builder, который берет схему либо из LITERAL, либо из uri; см. код флюма в основном ... –

+0

это правильно, серийный серийник по умолчанию будет просто писать формат avm –

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