本案例基于flume版本:apache-flume-1.6.0-cdh5.15.1
EXEC
SPOOL
TAILDIR
1.conf编写
taildir-memory-log.conf
1 | # 定义agent |
2.启动
1 | flume-ng agent \ |
3.测试
此时记录读取文件的位置信息的json文件已经生成,不过现在还没有开始读取数据,所以仅仅是一个空文件
1
2
3
4[hadoop@hadoop000 pos]$ pwd
/home/hadoop/data/flume/pos
[hadoop@hadoop000 pos]$ cat taildir_position.json
[hadoop@hadoop000 pos]$测试非指定后缀文件
1
2
3[hadoop@hadoop000 data]$ touch 1.txt
[hadoop@hadoop000 data]$ echo 111 >> 1.txt
[hadoop@hadoop000 data]$注意*:
echo 111 >> 1.txt
是追加到文件中,echo 111 > 1.txt
是覆盖文件中的内容
此时控制台是没有任何信息打印的,且taildir_position.json文件也没有任何信息
因为flume监控的是.log结尾的文件,所以其他结尾的文件不在监控范围内
在制定文件夹中创建指定后缀文件
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19# 在制定文件夹中 新建.log后缀文件
[hadoop@hadoop000 data]$ touch 1.log
# flume打印日志如下 ①处日志是新建文件打印的 只是新建的文件 还未填充数据进去 所有 pos为0
# 相应的查看 taildir_position.json 内容也是 pos:0
[hadoop@hadoop000 flume]$ flume-ng agent --name a1 --conf-file /home/hadoop/script/flume/taildir-memory-log.conf --conf $FLUME_HOME/conf -Dflume.root.logger=INFO,console
...
2018-04-19 18:42:31,127 (lifecycleSupervisor-1-4) [INFO - org.apache.flume.instrumentation.MonitoredCounterGroup.start(MonitoredCounterGroup.java:95)] Component type: SOURCE, name: r1 started
# ① 打印监控到的数据
2018-04-19 18:44:55,350 (PollableSourceRunner-TaildirSource-r1) [INFO - org.apache.flume.source.taildir.ReliableTaildirEventReader.openFile(ReliableTaildirEventReader.java:290)] Opening file: /home/hadoop/data/flume/data/1.log, inode: 134218383, pos: 0
2018-04-19 18:44:56,355 (PollableSourceRunner-TaildirSource-r1) [INFO - org.apache.flume.source.taildir.TaildirSource.closeTailFiles(TaildirSource.java:288)] Closed file: /home/hadoop/data/flume/data/1.log, inode: 134218383, pos: 0
# 查看 taildir_position.json
[hadoop@hadoop000 pos]$ cat taildir_position.json
[{"inode":134218383,"pos":0,"file":"/home/hadoop/data/flume/data/1.log"}]新增数据
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16# 填充数据到监控文件中
[hadoop@hadoop000 data]$ echo 111 >> 1.log
[hadoop@hadoop000 data]$ ls -lh 1.log
-rw-rw-r--. 1 hadoop hadoop 4 1月 3 18:50 1.log
# flume控制台对应的打印出监控到的数据
[hadoop@hadoop000 flume]$ flume-ng agent --name a1 --conf-file /home/hadoop/script/flume/taildir-memory-log.conf --conf $FLUME_HOME/conf -Dflume.root.logger=INFO,console
...
2018-04-19 18:50:30,924 (SinkRunner-PollingRunner-DefaultSinkProcessor) [INFO - org.apache.flume.sink.LoggerSink.process(LoggerSink.java:95)] Event: { headers:{file=/home/hadoop/data/flume/data/1.log} body: 31 31 31 111 }
# 相应的 taildir_position.json 也记录了 读取数据的位置
[hadoop@hadoop000 pos]$ cat taildir_position.json
[{"inode":134218383,"pos":4,"file":"/home/hadoop/data/flume/data/1.log"}]
[hadoop@hadoop000 pos]$
场景 正常运行的flume,突然挂掉了
此时kill flume,然后继续往1.log文件中新增数据,最后再启动flume
1 | # kill flume |
由此实现了 断点续传
- 本文作者: cll
- 本文链接: https://keeponcoding.github.io/2018/04/20/Flume-常用source组件测试案例/
- 版权声明: 本博客所有文章除特别声明外,均采用 Apache License 2.0 许可协议。转载请注明出处!