Flume监控目录并读取新添加的文件

本文详细介绍了如何使用spoolDirectory作为Flume Agent的source,实现从指定目录监控新文件并自动发送,同时避免重复读取已处理文件。通过配置示例图解,提供了一个易于理解的操作指南。
     官方文档:  http://flume.apache.org/FlumeUserGuide.html#spooling-directory-source
     使用spoolDirectory作为agent的source可以让flume自从监控指定的spoolDir目录,一旦有新文件生成就读取它并将它发送出去,已经读取过的文件会打上.COMPLETE后缀,不会重复发送。具体配置在官方文档中讲解得非常详细,这里列出我自己的例子,简要说明一下。
图1 用于spoolDir的agent配置文件
     主要将type类型设置为spooldir,另外需要指定spoolDir的路径,如图中1和2处所示。
要使用 Flume 监控特定目录文件上传时将其内容写入 HDFS,可以通过配置 Flume 的 `spooldir` 或 `TAILDIR` 源来实现。这两种源都支持监控目录中的文件读取其内容进行传输。 ### 配置 Flume 使用 TAILDIR 源监控目录 `TAILDIR` 源是 Flume 提供的一种高级文件源,能够自动检测读取添加监控目录中的文件,同时支持断点续传功能,适用于实时追加的文件。 #### 示例配置文件flume-taildir-hdfs.conf) ```properties # 定义 agent 的 sources、channels 和 sinks a3.sources = r1 a3.channels = c1 a3.sinks = k1 # 配置 source (TAILDIR) a3.sources.r1.type = TAILDIR a3.sources.r1.spoolDir = /path/to/monitoring/directory # 要监控的本地目录 a3.sources.r1.fileHeader = true # 可选:是否在事件头中包含文件名 # 配置 channel (memory channel) a3.channels.c1.type = memory a3.channels.c1.capacity = 10000 a3.channels.c1.transactionCapacity = 1000 # 配置 sink (HDFS) a3.sinks.k1.type = hdfs a3.sinks.k1.hdfs.path = hdfs://namenode:8020/user/flume/data/%Y-%m-%d # HDFS 存储路径,支持时间格式化 a3.sinks.k1.hdfs.fileType = DataStream a3.sinks.k1.hdfs.writeFormat = Text a3.sinks.k1.hdfs.rollInterval = 3600 # 滚动间隔(秒) a3.sinks.k1.hdfs.rollSize = 134217728 # 文件大小(字节),128MB a3.sinks.k1.hdfs.rollCount = 0 a3.sinks.k1.hdfs.idleTimeout = 60 # 文件空闲超时时间(秒) # 绑定组件 a3.sources.r1.channels = c1 a3.sinks.k1.channel = c1 ``` #### 启动 Flume Agent 命令 ```bash bin/flume-ng agent --conf conf/ --name a3 --conf-file job/flume-taildir-hdfs.conf ``` 该命令会启动一个名为 `a3` 的 Flume Agent,它将根据 `flume-taildir-hdfs.conf` 中定义的配置监听指定目录文件的内容上传至 HDFS [^1]。 ### 注意事项 - 确保 Hadoop 集群已经启动,特别是 HDFS 和 YARN 服务。 - `TAILDIR` 源会在监控目录下生成 `.flume_taildir` 文件,用于记录已处理文件的状态,确保重启后不会重复处理。 - HDFS 写入路径支持时间格式化参数,如 `%Y-%m-%d`,可以根据需要调整输出路径结构 [^3]。 - 如果希望将原始文件名信息附加到 HDFS 文件名中,可以启用 `fileHeader` 结合 `hdfs.fileType = SequenceFile` 或自定义命名策略 [^2]。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值