flume监控目录文件到hdfs

本文介绍如何在CentOS7环境下安装配置Apache Flume 1.7.0,实现从本地目录收集日志文件并自动上传至HDFS。具体步骤包括下载与解压Flume、配置flume-conf.properties文件、设置JDK环境变量、启动HDFS服务、启动Flume Agent等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

centos7
1:下载flume版本
apache-flume-1.7.0-bin.tar.gz:
2:解压到/usr/local/下面
3:修改/usr/local/flume/conf 文件夹下面的配置文件 flume-conf.properties
默认没有此文件需要从template文件复制
修改此文件内容为

#agent1 name
agent1.sources=source1
agent1.sinks=sink1
agent1.channels=channel1

#Spooling Directory
#set source1
agent1.sources.source1.type=spooldir
agent1.sources.source1.spoolDir=/usr/local/hadoop/dir/logdfs
agent1.sources.source1.channels=channel1
agent1.sources.source1.fileHeader = false
agent1.sources.source1.interceptors = i1
agent1.sources.source1.interceptors.i1.type = timestamp

#set sink1
agent1.sinks.sink1.type=hdfs
agent1.sinks.sink1.hdfs.path=/usr/local/hdfs/flume/logdfs
agent1.sinks.sink1.hdfs.fileType=DataStream
agent1.sinks.sink1.hdfs.writeFormat=TEXT
agent1.sinks.sink1.hdfs.rollInterval=1
agent1.sinks.sink1.channel=channel1
agent1.sinks.sink1.hdfs.filePrefix=%Y-%m-%d

#set channel1
agent1.channels.channel1.type=file
agent1.channels.channel1.checkpointDir=/usr/local/hadoop/dir/logdfstmp/point
agent1.channels.channel1.dataDirs=/usr/local/hadoop/dir/logdfstmp

4:修改flume-env.sh文件添加jdk环境变量
这里写图片描述
5:start-dfs.sh 启动hdfs服务 (注意hdfs集群中的任何一台服务器上安装flume 即可)

6:启动flume
flume-ng agent -n agent1 -c conf -f flume-conf.properties -Dflume.root.logger=DEBUG,console
注意flume-conf.properties 需要添加绝对路径
这里写图片描述
7:启动成功后使用vi命令向/usr/local/hadoop/dir/logdfs 目录中模拟添加文件
vi a.txt 添加内容后
这里写图片描述
文件多了后缀
这里写图片描述
然后打开hdfs目录查看
这里写图片描述

这里写图片描述

这里写图片描述
再次新增文件到/usr/local/hadoop/dir/logdfs 目录下 则flume 会将此新增文件存放在hdfs上面

### 使用 Apache Flume 将实时数据采集到 HDFS 的配置教程 #### 1. 配置概述 Apache Flume 是一种分布式的、可靠的、高可用的服务,专门设计用于大规模的日志收集和传输。通过 Flume 可以将来自同源的数据流式地写入目标存储系统,比如 HDFS。 以下是基于引用内容构建的一个完整的 Flume 数据采集到 HDFS 的配置示例[^1]。 --- #### 2. 创建必要的目录结构 为了确保 Flume 能够正常工作并记录状态信息,需预先创建所需的文件夹: - 在 `/usr/local/soft/apache-flume-1.9.0-bin/` 下创建 `log` 文件夹。 - 在该路径下进一步创建 `taildir_position.json` 文件,此文件用来保存读取文件的偏移量位置,防止重启后重复读取已处理过的数据[^3]。 ```bash mkdir -p /usr/local/soft/apache-flume-1.9.0-bin/log/ touch /usr/local/soft/apache-flume-1.9.0-bin/log/taildir_position.json ``` --- #### 3. 编辑 Flume 配置文件 假设我们希望监控某个日志文件的变化并将新增内容发送至 HDFS,则可以按照如下方式编写配置文件 `flume-conf.properties`: ```properties # 定义 agent 名称为 a1 a1.sources = r1 a1.sinks = k1 a1.channels = c1 # 配置 source (TailDir Source) a1.sources.r1.type = TAILDIR a1.sources.r1.positionFile = /usr/local/soft/apache-flume-1.9.0-bin/log/taildir_position.json a1.sources.r1.filegroups = f1 a1.sources.r1.filegroups.f1 = /usr/local/data/log/demo.log.* # 配置 channel (Memory Channel) a1.channels.c1.type = memory a1.channels.c1.capacity = 1000 a1.channels.c1.transactionCapacity = 100 # 配置 sink (HDFS Sink) a1.sinks.k1.type = hdfs a1.sinks.k1.hdfs.path = hdfs://namenode:8020/user/flume/logs/%Y%m%d a1.sinks.k1.hdfs.rollInterval = 60 a1.sinks.k1.hdfs.rollSize = 0 a1.sinks.k1.hdfs.rollCount = 0 a1.sinks.k1.hdfs.writeFormat = Text a1.sinks.k1.hdfs.fileType = DataStream # 绑定 source 和 sink 到同一个 channel a1.sources.r1.channels = c1 a1.sinks.k1.channel = c1 ``` 上述配置说明: - **Source**: 使用 TailDir Source 来监听指定路径下的多个日志文件变化,并自动跟踪新产生的文件[^5]。 - **Channel**: Memory Channel 存储临时事件缓冲区,支持快速吞吐但持久化数据。 - **Sink**: HDFS Sink 把接收到的消息存放到远程 HDFS 中,按日期分区存放以便后续分析。 需要注意的是如果输入数据包含 JSON 格式字符串则应验证其合法性以免引发异常[^4]。 --- #### 4. 启动 Flume Agent 完成以上设置之后即可启动 Flume 并开始执行任务: ```bash bin/flume-ng agent --conf conf/ --name a1 --conf-file flume-conf.properties -Dflume.root.logger=INFO,console ``` 此时任何向 `/usr/local/data/log/demo.log.*` 添加的新行都会被立即捕获并通过管道传送到设定好的 HDFS 地址上。 --- #### 5. 常见问题排查 假如在实际操作过程中遇到诸如 `com.alibaba.fastjson.JSONException: not close json text...` 类型报错时,请核查原始日志是否存在非法字符或未闭合的大括号等问题。必要情况下可增加预处理器来清洗脏数据后再提交给下游组件处理。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值