我是Flume(和HDFS)的新手,所以我希望我的问题不是愚蠢的。
我有一个多租户应用程序(约有100个不同的客户) 现在)。 我有16种不同的数据类型。
(在制作中,我们每天有大约1500万条消息 的RabbitMQ)
我想写一些HDFS我的所有事件,由租户分隔,数据类型, 和日期,像这样:
/data/{tenant}/{data_type}/2014/10/15/file-08.csv
是否可以使用一个接收器定义?我不想复制 配置,新客户每周都会到达
在文档中,我看到了
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/
我想根据传入的数据写入不同的文件夹。
答案 0 :(得分:1)
可能的解决办法可能是编写一个传递租户价值的拦截器。
请参阅以下链接
http://hadoopi.wordpress.com/2014/06/11/flume-getting-started-with-interceptors/
答案 1 :(得分:1)
是的,这确实是可能的。您可以使用元数据或传入数据中的某些字段将输出重定向到。
例如,在我的情况下,我得到不同类型的日志数据,我想相应地将它存储在相应的文件夹中。在我的例子中,我的日志行中的第一个单词是文件名。这是相同的配置代码段。
拦截器:
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
希望这有帮助。