Flume Agent配置

Flume Agent配置

Flume介紹

Flume的Agent主要是由三個重要的組件組成:分別爲Source、Channel、Sink。
(1)Source:完成對日誌數據的收集,分成transtion和event導入到Channel之中。
(2)Channel:主要提供一個隊列的功能,對Source提供的數據進行簡單的緩存。
(3)Sink:取出Channel中的數據,相應的存儲到文件系統,數據庫,或者提交到遠程服務器。

配置步驟

檢查Hadoop相關進程,是否已經啓動。若未啓動,切換到/apps/hadoop/sbin目錄下,啓動Hadoop。

1.jps  
2.cd /apps/hadoop/sbin  
3../start-all.sh 
  1. 切換到/data/flume2目錄下,如不存在需提前創建flume2文件夾,使用wget命令,在此目錄下下載http://192.168.1.100:60000/allfiles/flume2中的文件。
1.mkdir /data/flume2  
2.cd /data/flume2  

3.實驗場景1:source:exec,channel:memory,sink:logger,數據是/data/flume2/目錄下的goods文件。
場景1是最簡單的一個Flume配置,它的結構是由以下幾部分組成:首先定義各個組件,其次配置Source的類型爲exec,並定義了命令command爲tail -n 20 /data/flume2/goods(查看/data/flume2目錄下的goods文件裏的倒數20行記錄),然後配置Channel的類型爲memory,Sink的類型爲logger,最後將各個組件關聯起來(設置Source的Channel爲ch,Sink的Channel也爲ch)。
切換到/apps/flume/conf目錄下,使用vim編輯conf文件,名爲:exec_mem_logger.conf。

1.cd /apps/flume/conf  
2.vim exec_mem_logger.conf  

將以下內容寫入exec_mem_logger.conf文件中。

1.#定義各個組件  
2.agent1.sources  = src  
3.agent1.channels = ch  
4.agent1.sinks    = des  
5. 
6.#配置source  
7.agent1.sources.src.type = exec  
8.agent1.sources.src.command = tail -n 20 /data/flume2/goods  
9. 
10.#配置channel  
11.agent1.channels.ch.type = memory  
12. 
13.#配置sink  
14.agent1.sinks.des.type = logger  
15. 
16.##下面是把上面設置的組件關聯起來(把點用線連起來)  
17.agent1.sources.src.channels = ch  
18.agent1.sinks.des.channel    = ch

啓動flume命令:

1.flume-ng agent -c /conf -f /apps/flume/conf/exec_mem_logger.conf -n agent1 -Dflume.root.logger=DEBUG,console  

參數說明:# source:exec、channel:memory、 sink:logger
-c 配置文件存放的目錄
-f 所使用的配置文件路徑
-n agent的名稱
開啓flume後,查看輸出效果
按ctrl+c停止flume。
4.實驗場景2:source:exec,channel:memory,sink:hdfs。 場景2相對於場景1,它的Sink類型發生了變化,變成了hdfs型。其結構中定義的各組件,Source配置沒有變,在配置Channel時最大容量capacity爲100000,通信的最大容量爲100,在配置Sink時類型變爲hdfs,路徑設置爲hdfs://localhost:9000/myflume2/exec_mem_hdfs/%Y/%m/%d,裏面的%Y/%m/%d代表年月日,數據類型爲文本型,寫入格式爲Text格式,寫入hdfs的文件是否新建有幾種判斷方式:rollInterval表示基於時間判斷,單位是秒,當爲0時,表示不基於時間判斷。rollSize表示基於文件大小判斷,單位是B,當爲0時表示不基於大小判斷,rollCount表示基於寫入記錄的條數來判斷,當爲0時,表示不基於條數來判斷。idleTimeout表示基於空閒時間來判斷,單位是秒,當爲0時,代表不基於空閒時間來判斷。最後和實驗1一樣通過設置Source和Sink的Channel都爲ch,把Source、Channel和Sink三個組件關聯起來。
使用vim編輯conf文件,名爲:exec_mem_hdfs.conf。

1.cd /apps/flume/conf  
2.vim exec_mem_hdfs.conf  

將以下內容寫入exec_mem_hdfs.conf文件中。

1.#定義各個組件  
2.agent1.sources  = src  
3.agent1.channels = ch  
4.agent1.sinks    = des  
5. 
6.#配置source  
7.agent1.sources.src.type = exec  
8.agent1.sources.src.command = tail -n 20 /data/flume2/goods  
9. 
10.#配置channel  
11.agent1.channels.ch.type = memory  
12.agent1.channels.ch.keep-alive = 30  
13.agnet1.channels.ch.capacity = 1000000  
14.agent1.channels.ch.transactionCapacity = 100  
15. 
16.#配置sink  
17.agent1.sinks.des.type = hdfs  
18.agent1.sinks.des.hdfs.path = hdfs://localhost:9000/myflume2/exec_mem_hdfs/%Y%m%d/  
19.agent1.sinks.des.hdfs.useLocalTimeStamp = true  
20. 
21.#設置flume臨時文件的前綴爲 . 或 _ 在hive加載時,會忽略此文件。  
22.agent1.sinks.des.hdfs.inUsePrefix=_  
23.#設置flume寫入文件的前綴是什麼  
24.agent1.sinks.des.hdfs.filePrefix = abc  
25.agent1.sinks.des.hdfs.fileType = DataStream  
26.agent1.sinks.des.hdfs.writeFormat = Text  
27.#hdfs創建多久會新建一個文件,0爲不基於時間判斷,單位爲秒  
28.agent1.sinks.des.hdfs.rollInterval = 30  
29.#hdfs寫入的文件達到多大時,創建新文件 0爲不基於空間大小,單位B  
30.agent1.sinks.des.hdfs.rollSize = 100000  
31.#hdfs有多少條消息記錄時,創建文件,0爲不基於條數判斷  
32.agent1.sinks.des.hdfs.rollCount = 10000  
33.#hdfs空閒多久就新建一個文件,單位秒  
34.agent1.sinks.des.hdfs.idleTimeout = 30  
35.##下面是把上面設置的組件關聯起來(把點用線連起來)  
36.agent1.sources.src.channels = ch  
37.agent1.sinks.des.channel    = ch  

啓動flume命令:

1.flume-ng agent -c /conf -f /apps/flume/conf/exec_mem_hdfs.conf -n agent1 -Dflume.root.logger=DEBUG,console  

在另一窗口,查看HDFS上的輸出。

1.hadoop fs -ls -R /myflume2 

在執行flume命令的窗口,按ctrl+c停止flume。
5.實驗場景3:source:exec channel:file sink:hdfs。
場景3相對於場景2把通道Channel的類型從memory改變爲file。其結構在各組件定義,配置Source和設置組件的關聯三方面與場景2一樣。在配置Channel時把類型變爲file型,並設置了檢查點目錄checkpointDir爲/data/flume2/ckdir(用於檢查Flume與HDFS是否正常通信),還設置了數據存儲目錄dataDir爲/data/flume2/dataDir。在Sink配置中相對場景2增添了useLocalTimeStamp、inUsePrefix和filePrefix這三個設置。useLocalTimeStamp設置是判斷是否開啓使用本地時間戳,當設置爲true是表示開啓。inUsePrefix表示設置臨時文件的前綴這裏設置爲"_",filePrefix表示文件的前綴設置,這裏設置爲abc。
使用vim編輯conf文件,名爲:exec_file_hdfs.conf。

1.cd /apps/flume/conf  
2.vim exec_file_hdfs.conf  

將以下內容寫入到exec_file_hdfs.conf文件中。

1.#定義各個組件  
2.agent1.sources  = src  
3.agent1.channels = ch  
4.agent1.sinks    = des  
5. 
6.#配置source  
7.agent1.sources.src.type = exec  
8.agent1.sources.src.command = tail -n 20 /data/flume2/goods  
9. 
10.#配置channel  
11.agent1.channels.ch.type = file  
12.agent1.channels.ch.checkpointDir = /data/flume2/ckdir  
13.agent1.channels.ch.dataDirs = /data/flume2/datadir  
14. 
15.#配置sink  
16.agent1.sinks.des.type = hdfs  
17.agent1.sinks.des.hdfs.path = hdfs://localhost:9000/myflume2/exec_file_hdfs/%Y%m%d/  
18.agent1.sinks.des.hdfs.useLocalTimeStamp = true  
19. 
20.#設置flume臨時文件的前綴爲 . 或 _ 在hive加載時,會忽略此文件。  
21.agent1.sinks.des.hdfs.inUsePrefix=_  
22.#設置flume寫入文件的前綴是什麼  
23.agent1.sinks.des.hdfs.filePrefix = abc  
24.agent1.sinks.des.hdfs.fileType = DataStream  
25.agent1.sinks.des.hdfs.writeFormat = Text  
26.#hdfs創建多久會新建一個文件,0爲不基於時間判斷,單位爲秒  
27.agent1.sinks.des.hdfs.rollInterval = 30  
28.#hdfs寫入的文件達到多大時,創建新文件 0爲不基於空間大小,單位B  
29.agent1.sinks.des.hdfs.rollSize = 100000  
30.#hdfs有多少條消息記錄時,創建文件,0爲不基於條數判斷  
31.agent1.sinks.des.hdfs.rollCount = 10000  
32.#hdfs空閒多久就新建一個文件,單位秒  
33.agent1.sinks.des.hdfs.idleTimeout = 30  
34.##下面是把上面設置的組件關聯起來(把點用線連起來)  
35.agent1.sources.src.channels = ch  
36.agent1.sinks.des.channel    = ch  

啓動flume命令:

1.flume-ng agent -c /conf -f /apps/flume/conf/exec_file_hdfs.conf -n agent1 -Dflume.root.logger=DEBUG,console  

在另一窗口,查看HDFS上的輸出。

1.hadoop fs -ls -R /myflume2  

在執行flume命令的窗口,按ctrl+c停止flume。
6.實驗場景4:source:syslogtcp,channel:memory,sink:logger。
場景4是一個比較簡單的Flume組件配置。首先定義了各組件,然後配置Source,Source的類型配置爲syslogtcp,監聽端口爲6868,主機名爲localhost,接下來是配置了Channel的類型爲memeory,Sink的類型爲logger,最後用通過定義Source和Sink的Channel都爲ch,來將Source、Channel和Sink三個相關聯起來。
使用vim編輯conf文件,名爲:syslog_mem_logger.conf。

1.cd /apps/flume/conf  
2.vim syslog_mem_logger.conf  

將以下內容寫入到syslog_mem_logger.conf文件中。

1.#定義各個組件  
2.agent1.sources  = src  
3.agent1.channels = ch  
4.agent1.sinks    = des  
5. 
6.#配置source  
7.agent1.sources.src.type = syslogtcp  
8.agent1.sources.src.port = 6868  
9.agent1.sources.src.host = localhost  
10. 
11.#配置channel  
12.agent1.channels.ch.type = memory  
13. 
14.#配置sink  
15.agent1.sinks.des.type = logger  
16. 
17.##下面是把上面設置的組件關聯起來(把點用線連起來)  
18.agent1.sources.src.channels = ch  
19.agent1.sinks.des.channel    = ch  

啓動flume命令:

1.flume-ng agent -c /conf -f /apps/flume/conf/syslog_mem_logger.conf -n agent1 -Dflume.root.logger=DEBUG,console  

在另一個窗口,向6868端口發送數據:
1.echo “hello can you hear me?” | nc localhost 6868
在剛纔執行啓動flume命令的窗口查看輸出

配置結束

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章