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
- 切換到/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命令的窗口查看輸出