flume - 水槽配置 - spoolDir 和文件滚动接收器的变量
问题描述
我已经搜索过,有很多关于如何使用'fileHeader'
and 'basenameHeader'
for的帖子spoolDirectory
,尽管它似乎不适用于我的情况。
我的目标是使用 Flume 将本地目录中的文件提取到使用file_roll
sink 的 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}
解决方案
在 Rolling File Sink 的文档中,没有指定输出文件的文件名的选项。
我检查了源代码以找到解决此问题的方法,但没有简单的方法可以解决。Flume 仅使用当前时间戳来生成文件名。您只能为输出文件指定前缀和扩展名。
但是,您可以扩展DefaultPathManager
并添加执行此操作的功能,或者您可以创建一个新的自定义接收器(您自己的滚动文件接收器),它能够从水槽事件头中获取文件名头并使用此信息创建输出文件输入文件的相同值。
要创建自定义接收器,您可以查看Flume 开发人员指南的接收器部分。
额外的信息:
training_agent.sinks.sink1.sink.pathManager.prefix = ${file}
您不能直接在水槽配置文件中使用环境变量。如果要在水槽配置中使用环境变量,则必须将其添加到执行命令中。
-DpropertiesImplementation=org.apache.flume.node.EnvVarResolverProperties
推荐阅读
- c++ - 显示窗口控件的“全尺寸”
- python - AttributeError:模块“comtypes.gen.SpeechLib”没有属性“ISpeechVoice”
- sql - 多行数据到一个表中的多列
- typescript - 将 shell 脚本与 GitHub 操作捆绑在一起的首选方式
- memory-management - 当使用 GFP_KERNEL 的参数单独调用 kmalloc 时,首选哪种类型的页面、不可移动、可回收或可移动页面?
- php - 无法从 ec2 连接到外部数据库
- linux - Linux Bash:列出具有 IP 和 Mac 地址的接口
- python - Python3 以网络摄像头 fps 处理和显示网络摄像头流
- java - 如何为 Optional 指定 JsonFormat
使用 LocalDateSerializer? - node.js - Npm install 无法正常工作得到凉亭 ECMDERR