flume 增量上傳日誌檔案到HDFS中

2021-09-07 16:34:48 字數 4757 閱讀 9848

1.採集日誌檔案時乙個很常見的現象 採集需求:比如業務系統使用log4j生成日誌,日誌內容不斷增加,需要把追加到日誌檔案中的資料實時採集到hdfs中。 1.1.根據需求,首先定義一下3大要素: 採集源,即source—監控日誌檔案內容更新:exec 『tail -f file』 下沉目標,即sink—hdfs檔案系統:hdfs sink source和sink之間

採集需求:比如業務系統使用log4j生成日誌,日誌內容不斷增加,需要把追加到日誌檔案中的資料實時採集到hdfs中。
採集源,即source—監控日誌檔案內容更新:exec 『tail -f file』 

下沉目標,即sink—hdfs檔案系統:hdfs sink 

source和sink之間的傳遞通道—-channel,可用file channel也可以用 記憶體channel。

# 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

[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

編寫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 2023年 06月 13日 星期二 22:02:22 cst 2023年 06月 13日 星期二 22:02:24 cst 2023年 06月 13日 星期二 22:02:26 cst 2023年 06月 13日 星期二 22:02:28 cst 2023年 06月 13日 星期二 22:02:30 cst 2023年 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中。

flume增量讀取mysql資料寫入到hdfs

宣告source,channel,sink a1.sources sqlsource a1.channels c1 a1.sinks s1 宣告source型別 a1.sources.sqlsource.type org.keedio.flume.source.sqlsource a1.source...

Flume監聽上傳Hive日誌檔案到HDFS 02

把agent起個名叫a2,sources叫r2,sinks叫k2.hdfs,channels叫c2 a2.sources r2 a2.sinks k2 a2.channels c2 監聽資料 為本地的4444埠 describe configure the source a2.sources.r2....

Flume儲存日誌到MongoDB

然後放到 usr local 目錄下解壓 tar zxvf apache flume 1.5.2 bin.tar.gz 定義元件名稱 agent2.sources source2 agent2.sinks sink2 agent2.channels channel2 定義資料入口 agent2.so...