槽配置-spoolDir和文件卷接收器的变量

时间:2018-08-06 08:23:31

标签: flume flume-ng

我已经搜索过,并且有很多关于如何将'fileHeader''basenameHeader'用作spoolDirectory的帖子,尽管对于我来说似乎不起作用。

我的目标是使用Flume使用file_roll接收器将本地目录中的文件提取到Blob目录中,并保留文件名或至少将文件放入具有相同名称的目录中作为文件名。 例如,

  

/input/january.txt -> /blob_output/january.[timestamp]或/input/january.txt -> / blob_output / january / [timestamp] .txt

问题是我似乎无法调用文件名或基名的变量,因为它始终不返回任何内容(或为null),从而导致输出名称中仅包含时间戳记。 这是我的水槽配置:

training_agent.sources = src1
training_agent.channels = ch1
training_agent.sinks = sink1

training_agent.sources = src1
training_agent.channels = ch1
training_agent.sinks = sink1

training_agent.sources.src1.type = spooldir
training_agent.sources.src1.channels = ch1
training_agent.sources.src1.spoolDir = /home/training/input/
training_agent.sources.src1.batchSize = 5
training_agent.sources.src1.fileHeader = true

training_agent.channels.ch1.type = memory
training_agent.channels.capacity = 500
training_agent.channels.ch1.transactionCapacity = 50

training_agent.sinks.sink1.type = file_roll
training_agent.sinks.sink1.sink.rollInterval = 0
training_agent.sinks.sink1.channel = ch1
training_agent.sinks.sink1.sink.directory = /blobtraining_path/destination
training_agent.sinks.sink1.sink.pathManager.prefix = ${file}

1 个答案:

答案 0 :(得分:0)

在滚动文件接收器的documentation中,没有选项可以指定输出文件的文件名。

我检查source来找到解决此问题的方法,但是没有简单的方法可以解决。 Flume仅使用当前时间戳生成文件名。您只能为输出文件指定前缀和扩展名。

但是,您可以扩展DefaultPathManager并添加此功能,也可以创建一个新的自定义接收器(您自己的滚动文件接收器),该接收器具有从flume事件标题和使用此信息来创建具有与输入文件相同值的输出文件。

要创建自定义接收器,可以查看Flume Developer Guide的“接收器”部分。

其他信息:

training_agent.sinks.sink1.sink.pathManager.prefix = ${file}

您不能在水槽配置文件中直接使用环境变量。如果要在水槽配置中使用环境变量,则必须将其添加到执行命令中。

-DpropertiesImplementation=org.apache.flume.node.EnvVarResolverProperties