hdfsFlume:“聪明”文件夹路由

6mzjoqzu  于 2021-06-04  发布在  Flume
关注(0)|答案(2)|浏览(262)

我对flume(和hdfs)是新手,所以我希望我的问题不是愚蠢的。
我有一个多租户应用程序(目前大约有100个不同的客户)。我有16种不同的数据类型。
(在生产中,我们通过rabbitmq每天大约有1500万条消息)
我想将所有事件写入hdfs,按租户、数据类型和日期分隔,如下所示:

/data/{tenant}/{data_type}/2014/10/15/file-08.csv

一个Flume的定义可以吗?我不想重复配置,新的客户端每周都会到达
在文档中,我明白了

agent1.sinks.hdfs-sink1.hdfs.path = hdfs://server/events/%Y/%m/%d/%H/

这可能吗?

agent1.sinks.hdfs-sink1.hdfs.path = hdfs://server/events/%tenant/%type/%Y/%m/%d/%H/

我想根据传入的数据写入不同的文件夹。

bqjvbblv

bqjvbblv1#

可能的解决方案是编写一个传递租户值的拦截器。
请参考下面的链接
http://hadoopi.wordpress.com/2014/06/11/flume-getting-started-with-interceptors/

q1qsirdb

q1qsirdb2#

是的,这确实是可能的。您可以使用元数据或传入数据中的某个字段将输出重定向到。
例如,在我的例子中,我得到了不同类型的日志数据,我想相应地将其存储在相应的文件夹中。在我的例子中,日志行中的第一个单词是文件名。下面是相同的配置代码段。
拦截器:

dataplatform.sources.source1.interceptors = i3
dataplatform.sources.source1.interceptors.i3.type = regex_extractor
dataplatform.sources.source1.interceptors.i3.regex = ^(\\w*)\t.*
dataplatform.sources.source1.interceptors.i3.serializers = s1
dataplatform.sources.source1.interceptors.i3.serializers.s1.name = filename

hdfs接收器

dataplatform.sinks.sink1.type = hdfs
dataplatform.sinks.sink1.hdfs.path = hdfs://server/events/provider=%{filename}/years=%Y/months=%Y%m/days=%Y%m%d/hours=%H

希望这有帮助。

相关问题