flume:hdfseventsink-如何动态复用?

xtupzzrd  于 2021-05-29  发布在  Hadoop
关注(0)|答案(1)|浏览(361)

小结:我有一个多路复用的场景,我想知道如何动态多路复用-不是基于静态配置的值,而是基于字段的变量值(例如日期)。
详细信息:我有一个输入,由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”:

agent.sinks.hdfsSink-10.channel = chan-10
agent.sinks.hdfsSink-10.hdfs.path = hdfs://some/path/
agent.sinks.hdfsSink-10.hdfs.filePrefix = entity10

# ...

agent.sinks.hdfsSink-11.channel = chan-11
agent.sinks.hdfsSink-11.hdfs.path = hdfs://some/path/
agent.sinks.hdfsSink-11.hdfs.filePrefix = entity11

# ...

这会为每个实体生成一个文件,这很好。现在我想引入第二个变量,它是动态的:日期。根据事件日期,我想创建每个实体每个日期的文件。日期是一个动态值,所以我无法预先配置多个接收器,以便每个接收器都发送到一个单独的文件。此外,每个接收器只能指定一个hdfs输出。
所以,这就像需要一个“多输出hdfseventsink”(类似于hadoop的multipleoutputs库)。flume中有这样的功能吗?
如果没有,有什么优雅的方法来解决这个问题吗?另一个选择是修改hdfseventsink,似乎可以通过为每个事件创建不同的“realname”(字符串)来实现。

xn1cxnb4

xn1cxnb41#

实际上,您可以在hdfs sink的path或fileprefix中指定变量。例如,如果变量的键在事件头中是“date”,则可以这样配置:

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

相关问题