带有多个Avro架构的水槽

时间:2015-01-21 18:09:24

标签: schema flume avro serializer

我正在使用Flume将小型Avro文件(每个包含几个Avro事件)合并到较大的文件中以存储在HDFS中。我正在使用Spool源和HDFS接收器,以及Avro Serializer。我的Spool目录包含3个不同模式的文件。是否可以将Avme文件与每个不同模式的Avro文件合并到不同的接收文件中?

提前致谢

1 个答案:

答案 0 :(得分:1)

是的,实际上是。实际上,flume实际上做的是将Avro对象包装到Event类型的另一个Avro容器对象中,该对象由标题和正文组成。该实体实际上包含您的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>);

基本上就是这样。