我使用flume将小的avro文件(每个文件包含几个avro事件)组合成更大的文件存储在hdfs中。我正在使用spool源和hdfs接收器,以及avro序列化程序。我的spool目录包含具有3种不同模式的文件。是否可以配置flume,使其将具有每个不同模式的avro文件组合到不同的sink文件中?提前谢谢
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>);` 基本上就是这样。
1条答案
按热度按时间ufj5ltwl1#
是的,事实上是这样。flume实际做的是将avro对象 Package 到另一个event类型的avro容器对象中,该容器对象由头和主体组成。这个实体实际上包含了你的avro对象。
为了将这些文件假脱机到hdfs中的不同目录,您必须设置标头,您可以在路径中引用这些标头,例如: