具有多个avro模式的Flume

ewm0tg9j  于 2021-06-04  发布在  Flume
关注(0)|答案(1)|浏览(363)

我使用flume将小的avro文件(每个文件包含几个avro事件)组合成更大的文件存储在hdfs中。我正在使用spool源和hdfs接收器,以及avro序列化程序。我的spool目录包含具有3种不同模式的文件。是否可以配置flume,使其将具有每个不同模式的avro文件组合到不同的sink文件中?
提前谢谢

ufj5ltwl

ufj5ltwl1#

是的,事实上是这样。flume实际做的是将avro对象 Package 到另一个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>);` 基本上就是这样。

相关问题