flume采集文件到hdfs中配置文件的tail命令的用途
时间: 2024-12-02 22:27:43 浏览: 20
Flume是一个分布式、可靠的数据管道工具,常用于日志收集和传输。它的`tail`命令在Flume的配置文件(通常是`flume.conf`)中的`Source`组件部分用于监控指定目录下的新创建或修改的文件。当有新的文件满足监控条件(如文件大小、时间戳等)时,`tail`源会自动读取这些文件的内容,并开始将数据发送到后续的处理器或存储目标,比如Hadoop HDFS。
配置文件中的`tail`可能包含如下关键元素:
```properties
<tail>
dir = /path/to/your/logs
filenamePattern = *.log
initialDelay = 0
followTail = true
</tail>
```
这里:
- `dir`:指定要监控的日志文件所在的目录。
- `filenamePattern`:定义匹配文件名模式,例如`*.log`表示所有.log结尾的文件。
- `initialDelay`:初始等待时间(秒),直到开始监听文件变化。
- `followTail`:如果设置为true,Flume会在检测到文件追加新内容时持续读取,而不是只在文件首次打开时读取一次。
相关问题
flume采集数据存至hdfs
### 配置 Flume 将数据采集后存储到 HDFS
为了实现通过 Flume 收集日志并将这些日志存储至 HDFS 中,需按照如下方法设置 `flume` 的配置文件以及启动命令。
#### 创建和编辑配置文件
创建一个新的配置文件位于 `/opt/software/flume/apache-flume-1.9.0-bin/conf/demo.conf` 文件中定义 source, channel 和 sink 组件之间的连接关系[^2]:
```properties
# 定义agent名称为a1及其组件source、channel、sink
a1.sources = r1
a1.sinks = k1
a1.channels = c1
# 描述配置给定source的type和其他属性
a1.sources.r1.type = exec
a1.sources.r1.command = tail -F /path/to/logfile.log
# 使用内存作为通道
a1.channels.c1.type = memory
a1.channels.c1.capacity = 1000
a1.channels.c1.transactionCapacity = 100
# 设置sink指向HDFS
a1.sinks.k1.type = hdfs
a1.sinks.k1.hdfs.path = hdfs://namenode:8020/access/
a1.sinks.k1.hdfs.fileType = DataStream
a1.sinks.k1.hdfs.writeFormat = Text
a1.sinks.k1.hdfs.batchSize = 1000
a1.sinks.k1.hdfs.rollInterval = 600
a1.sinks.k1.hdfs.rollSize = 0
a1.sinks.k1.hdfs.rollCount = 0
# 连接source/channel/sink
a1.sources.r1.channels = c1
a1.sinks.k1.channel = c1
```
上述配置说明了如何利用 `exec` 类型的数据源读取本地的日志文件,并将其发送到指定路径下的 HDFS 存储位置。这里假设日志文件存在于服务器上的某个固定路径下;如果需要监控数据库中的变化,则可以替换相应的 Source Type 如 SQLSource 来代替默认的 Exec Source[^5]。
#### 启动 Flume Agent 并使其后台运行
当所有的准备工作完成后,在终端执行以下指令来启动名为 "a1" 的代理程序并让其以后台模式持续工作:
```bash
nohup ./bin/flume-ng agent -c conf/ -f /opt/software/flume/apache-flume-1.9.0-bin/conf/demo.conf -n`. 此外还使用了 nohup 命令使得即使关闭当前shell窗口也不会影响该进程继续执行[^3].
#### 检查 HDFS 上的结果
最后可以通过访问 HDFS 查看是否成功上传了由 Flume 所收集的日志文件:
```bash
cd /home/soft/hadoop-3.2.4/bin
./hdfs dfs -ls -R /access
```
此命令会列出所有存放在 `/access` 路径下的文件列表,从而验证 Flume 是否正常运作并向目标地址写入了预期的内容[^1].
根据提示,将 /opt/flume/flumedata 目录下的 aa.txt (平台已经帮你创建完毕) 采集到 Hdfs,你只需在Begin-End区域内配置配置文件即可,其余步骤后台会自动完成(平台后台向 aa.txt 文件中发送一条消息 From introduction to mastery,因为本实训中 source 源为 exec,学员在自己电脑环境中可以使用命令行发送,命令为echo " From introduction to mastery" >> /opt/flume/flumedata/aa.txt)。 aa.txt文件中的内容如下: Hadoop JAVA Flume 配置文件要求 : Agent命名为 a1 ; source选用 exec 采集所有文件; Channel选用 memery; 文件保存到 hdfs有如下要求 : hdfs路径名称: hdfs://localhost:9000; 保存到 flume 目录下; 文件前缀命名为 wcm; 文件后缀命名为 .wsy; 每 6s 回滚一次文件; 文件格式使用DataStream。
以下是配置文件的示例,您可以将其粘贴到Begin-End区域内进行配置:
```
# 定义Agent名称和组件
a1.sources = r1
a1.channels = c1
a1.sinks = k1
# 配置source组件
a1.sources.r1.type = exec
a1.sources.r1.command = tail -F /opt/flume/flumedata/aa.txt
a1.sources.r1.channels = c1
a1.sources.r1.batchSize = 1000
a1.sources.r1.interceptors = i1
a1.sources.r1.interceptors.i1.type = timestamp
# 配置channel组件
a1.channels.c1.type = memory
a1.channels.c1.capacity = 10000
a1.channels.c1.transactionCapacity = 1000
# 配置sink组件
a1.sinks.k1.type = hdfs
a1.sinks.k1.hdfs.path = hdfs://localhost:9000/flume
a1.sinks.k1.hdfs.filePrefix = wcm
a1.sinks.k1.hdfs.fileSuffix = .wsy
a1.sinks.k1.hdfs.rollInterval = 6
a1.sinks.k1.hdfs.fileType = DataStream
a1.sinks.k1.channel = c1
```
配置文件说明:
- Agent名称为a1,包含一个source组件r1、一个channel组件c1和一个sink组件k1。
- source组件选用exec类型,用于采集/opt/flume/flumedata/aa.txt文件中新添加的内容。
- channel组件选用memory类型,用于缓存采集到的数据。
- sink组件选用hdfs类型,用于将数据保存到HDFS中,配置了HDFS路径名称、文件前缀、文件后缀、回滚时间和文件格式等参数。
请注意,为了保证能够正确运行配置文件,您还需要确保以下几点:
- Flume已经正确安装并启动。
- HDFS已经正确安装并启动。
- aa.txt已经正确创建,并且其中已经包含了一条消息。
- 如果您没有按照提示手动发送消息到aa.txt中,可以将配置文件中的command参数修改为`tail -F /opt/flume/flumedata/*.txt`,这样就可以采集所有以txt结尾的文件了。
阅读全文