Hadoop Flume:HDFSEventSink-如何动态多路复用?

Hadoop Flume:HDFSEventSink-如何动态多路复用?,hadoop,configuration,hdfs,flume,data-ingestion,Hadoop,Configuration,Hdfs,Flume,Data Ingestion,摘要:我有一个多路复用场景,想知道如何动态多路复用-不是基于静态配置的值,而是基于字段的可变值(例如日期) 详细信息: 我有一个输入,由entityId分隔。 由于我知道我正在使用的实体,我可以在典型的Flume多通道选择中对其进行配置 agent.sources.jmsSource.channels = chan-10 chan-11 # ... agent.sources.jmsSource.selector.type = multiplexing agent.sources.jmsSo

摘要:我有一个多路复用场景,想知道如何动态多路复用-不是基于静态配置的值,而是基于字段的可变值(例如日期)

详细信息: 我有一个输入,由entityId分隔。 由于我知道我正在使用的实体,我可以在典型的Flume多通道选择中对其进行配置

agent.sources.jmsSource.channels  = chan-10 chan-11 # ...

agent.sources.jmsSource.selector.type = multiplexing
agent.sources.jmsSource.selector.header = EntityId
agent.sources.jmsSource.selector.mapping.10 = chan-10
agent.sources.jmsSource.selector.mapping.11 = chan-11
# ...
每个通道都连接到单独的HDFSEventSink,“hdfsSink-n”:

这会为每个实体生成一个文件,这很好。 现在我想引入第二个变量,它是动态的:日期。根据事件日期,我希望在每个日期为每个实体创建文件。 Date是一个动态值,因此我无法预先配置多个接收器,以便每个接收器发送到单独的文件。此外,每个接收器只能指定一个HDFS输出

因此,它就像需要一个“多输出HDFSEventSink”(类似于Hadoop的MultipleOutputs库)。水槽中有这样的功能吗


如果没有,有什么优雅的方法来解决这个问题吗?另一个选项是修改HDFSEventSink,它似乎可以通过为每个事件创建不同的“realName”(字符串)来实现。

实际上,您可以在hdfs sink的路径或文件前缀中指定变量。 例如,如果变量的键在事件标题中为“日期”,则可以如下配置:

agent.sinks.hdfsSink-11.hdfs.filePrefix = entity11-%{date}
agent.sinks.hdfsSink-11.hdfs.filePrefix = entity11-%{date}