水槽配置 - spoolDir和文件卷水槽的变量

问题描述 投票:0回答:1

我搜索过,有多篇文章关于如何使用'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}
flume flume-ng
1个回答
0
投票

在Rolling File Sink的documentation中,没有选项指定输出文件的文件名。

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

但是,您可以扩展DefaultPathManager并添加执行此操作的功能,或者您可以创建一个新的自定义接收器(您自己的滚动文件接收器),它能够从flume事件头获取文件头,并使用此信息创建输出文件具有相同的输入文件值。

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

额外的信息:

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

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

-DpropertiesImplementation=org.apache.flume.node.EnvVarResolverProperties
© www.soinside.com 2019 - 2024. All rights reserved.