我正在使用Flume将小型Avro文件(每个包含几个Avro事件)合并到较大的文件中以存储在HDFS中。我正在使用Spool源和HDFS接收器,以及Avro Serializer。我的Spool目录包含3个不同模式的文件。是否可以将Avme文件与每个不同模式的Avro文件合并到不同的接收文件中?
提前致谢
答案 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>);
基本上就是这样。