模擬使用Flume監聽日誌變化,並且把增量的日誌文件寫入到hdfs中
1.采集日誌文件時一個很常見的現象
采集需求:比如業務係統使用log4j生成日誌,日誌內容不斷增加,需要把追加到日誌文件中的數據實時采集到hdfs中。
1.1.根據需求,首先定義一下3大要素:
采集源,即source—監控日誌文件內容更新:exec ‘tail -F file’
下沉目標,即sink—HDFS文件係統:hdfs sink
Source和sink之間的傳遞通道—-channel,可用file channel也可以用 內存channel。
1.2.進入/home/tuzq/software/apache-flume-1.6.0-bin/agentconf,編寫配置文件tail-hdfs.conf,文件內容如下:
# Name the components on this agent
a1.sources = r1
a1.sinks = k1
a1.channels = c1
# Describe/configure the source
## exec表示flume回去調用給的命令,然後從給的命令的結果中去拿數據
a1.sources.r1.type = exec
## 使用tail這個命令來讀數據
a1.sources.r1.command = tail -F /home/tuzq/software/flumedata/test.log
a1.sources.r1.channels = c1
# Describe the sink
## 表示下沉到hdfs,類型決定了下麵的參數
a1.sinks.k1.type = hdfs
## sinks.k1隻能連接一個channel,source可以配置多個
a1.sinks.k1.channel = c1
## 下麵的配置告訴用hdfs去寫文件的時候寫到什麼位置,下麵的表示不是寫死的,而是可以動態的變化的。表示輸出的目錄名稱是可變的
a1.sinks.k1.hdfs.path = /flume/tailout/%y-%m-%d/%H%M/
##表示最後的文件的前綴
a1.sinks.k1.hdfs.filePrefix = events-
## 表示到了需要觸發的時間時,是否要更新文件夾,true:表示要
a1.sinks.k1.hdfs.round = true
## 表示每隔1分鍾改變一次
a1.sinks.k1.hdfs.roundValue = 1
## 切換文件的時候的時間單位是分鍾
a1.sinks.k1.hdfs.roundUnit = minute
## 表示隻要過了3秒鍾,就切換生成一個新的文件
a1.sinks.k1.hdfs.rollInterval = 3
## 如果記錄的文件大於20字節時切換一次
a1.sinks.k1.hdfs.rollSize = 20
## 當寫了5個事件時觸發
a1.sinks.k1.hdfs.rollCount = 5
## 收到了多少條消息往dfs中追加內容
a1.sinks.k1.hdfs.batchSize = 10
## 使用本地時間戳
a1.sinks.k1.hdfs.useLocalTimeStamp = true
#生成的文件類型,默認是Sequencefile,可用DataStream:為普通文本
a1.sinks.k1.hdfs.fileType = DataStream
# Use a channel which buffers events in memory
##使用內存的方式
a1.channels.c1.type = memory
a1.channels.c1.capacity = 1000
a1.channels.c1.transactionCapacity = 100
# Bind the source and sink to the channel
a1.sources.r1.channels = c1
a1.sinks.k1.channel = c1
1.3.編寫完成之後,啟動flume,執行的命令是:
[root@hadoop1 flumedata]#cd /home/tuzq/software/apache-flume-1.6.0-bin/agentconf
[root@hadoop1 flumedata]#bin/flume-ng agent -c conf -f agentconf/tail-hdfs.conf -n a1
1.4.通過寫一個死循環往test.log中寫數據的方式模式日誌文件增長
編寫shell腳本,模擬日誌增長變化。
[root@hadoop1 flumedata]# cd /home/tuzq/software/flumedata
[root@hadoop1 flumedata]# while true
>do
> date >> test.log
> sleep 2
> done
查看日誌變化
[root@hadoop1 ~]# cd /home/tuzq/software/flumedata/
[root@hadoop1 flumedata]# ls
access.log error.log test.log
[root@hadoop1 flumedata]# tail -f test.log
2017年 06月 13日 星期二 22:02:22 CST
2017年 06月 13日 星期二 22:02:24 CST
2017年 06月 13日 星期二 22:02:26 CST
2017年 06月 13日 星期二 22:02:28 CST
2017年 06月 13日 星期二 22:02:30 CST
2017年 06月 13日 星期二 22:02:32 CST
通過上麵的文件,可以看到test.log在不停的追加數據。
到hdfs中進行查看,效果如下:
[root@hadoop1 ~]# hdfs dfs -ls /
Found 5 items
drwxr-xr-x - root supergroup 0 2017-06-13 12:01 /40000
drwxr-xr-x - root supergroup 0 2017-06-13 22:01 /flume
-rw-r--r-- 3 root supergroup 3719 2017-06-10 12:11 /kms.sh
drwxrwxrwx - root supergroup 0 2017-06-10 22:06 /tmp
drwxr-xr-x - root supergroup 0 2017-06-10 22:27 /user
[root@hadoop1 ~]# hdfs dfs -ls /flume
Found 1 items
drwxr-xr-x - root supergroup 0 2017-06-13 22:01 /flume/tailout
[root@hadoop1 ~]# hdfs dfs -ls /flume/tailout
Found 1 items
drwxr-xr-x - root supergroup 0 2017-06-13 22:03 /flume/tailout/17-06-13
[root@hadoop1 ~]# hdfs dfs -ls /flume/tailout/17-06-13
Found 4 items
drwxr-xr-x - root supergroup 0 2017-06-13 22:01 /flume/tailout/17-06-13/2201
drwxr-xr-x - root supergroup 0 2017-06-13 22:03 /flume/tailout/17-06-13/2202
drwxr-xr-x - root supergroup 0 2017-06-13 22:04 /flume/tailout/17-06-13/2203
drwxr-xr-x - root supergroup 0 2017-06-13 22:04 /flume/tailout/17-06-13/2204
[root@hadoop1 ~]# hdfs dfs -ls /flume/tailout/17-06-13
Found 5 items
drwxr-xr-x - root supergroup 0 2017-06-13 22:01 /flume/tailout/17-06-13/2201
drwxr-xr-x - root supergroup 0 2017-06-13 22:03 /flume/tailout/17-06-13/2202
drwxr-xr-x - root supergroup 0 2017-06-13 22:04 /flume/tailout/17-06-13/2203
drwxr-xr-x - root supergroup 0 2017-06-13 22:05 /flume/tailout/17-06-13/2204
drwxr-xr-x - root supergroup 0 2017-06-13 22:05 /flume/tailout/17-06-13/2205
[root@hadoop1 /]# hdfs dfs -ls /flume/tailout/17-06-13
Found 6 items
drwxr-xr-x - root supergroup 0 2017-06-13 22:01 /flume/tailout/17-06-13/2201
drwxr-xr-x - root supergroup 0 2017-06-13 22:03 /flume/tailout/17-06-13/2202
drwxr-xr-x - root supergroup 0 2017-06-13 22:04 /flume/tailout/17-06-13/2203
drwxr-xr-x - root supergroup 0 2017-06-13 22:05 /flume/tailout/17-06-13/2204
drwxr-xr-x - root supergroup 0 2017-06-13 22:06 /flume/tailout/17-06-13/2205
drwxr-xr-x - root supergroup 0 2017-06-13 22:06 /flume/tailout/17-06-13/2206
[root@hadoop1 /]
通過上麵的案例可以知道,增加的日誌文件已經被寫入到HDFS中。
可供參考的文件:https://blog.csdn.net/tototuzuoquan/article/details/73194903
最後更新:2017-06-14 08:55:53