Flume1 初識Flume和虛擬機搭建Flume環境

前言:html

      工做中須要同步日誌到hdfs,之前是找運維用rsync作同步,如今通常是用flume同步數據到hdfs。之前爲了工做簡單看個flume的一些東西,今天下午有時間本身利用虛擬機搭建了flume環境,並簡單作了幾個練習。學習過程當中仍是比較順利的,如今將學習的過程記錄與此,供之後本身查閱,若是能幫助到其餘人,天然是更好的。node

===============================================================長長的分割線====================================================================apache

正文:服務器

  關於flume的理論介紹,網上能夠搜到到不少的資料,你們能夠自行搜索,我這裏就不在重複贅述。運維

      本文中主要涉及三塊內容: 第一,fume概念簡介;第二,搭建flume環境並運行hello word;第三,在第二點的基礎上,再介紹一種「源」的使用方式。工具

 

  第一步,flume簡介(這部分資料參考了網上文章的資料):學習

    (1). flume基本組件            測試

   a. Event:消息的基本單位,由headers和body組成
   b. Agent:JVM進程,負責將外部來源產生的消息轉發到外部的目的地 
    • Source:從外部來源讀入event,並寫入channel 
    • Channel:event暫存組件,source寫入後,event將會一直保存,直到被sink成功消費。 
    • Sink:從channel讀入event,並寫入目的地this

      (2). flume數據流,對照下面的兩幅數據流圖片,須要咱們記住以下概念:spa

       a. 源將事件寫到一個或多個通道中

       b. 通道做爲事件從源到接收器傳遞的保留區

       c. 接收器只從一個通道接收事件

       d. 代理可能會有多個源、通道與接收器。

      

       

    

      第二步,搭建flume環境並運行hello world:

      (1). 從flume官網上下載 http://flume.apache.org/download.html  flume安裝包,能夠下載源碼包本身編譯,可是我當初直接下載了編譯好的apache-flume-1.5.2-bin.tar.gz。

      (2). 將apache-flume-1.5.2-bin.tar.gz這個壓縮包經過tar -xzvf apache-flume-1.5.2-bin.tar.gz 命令解壓縮。爲了便於後邊的講解說一下我解壓縮後的目錄: /myself_settings/flume1.5.2/apache-flume-1.5.2-bin

      (3). 直接進入conf目錄,配置example0001.conf 配置文件,配置內容以下: 咱們定義了一個名叫agent1的Agent。其中包含了名爲src1的源、名爲channel1的通道以及名爲sink1的接收器。

 1 # example0001.conf: A single-node Flume Configuration
 2 
 3 # Name the components on this agent
 4 agent1.sources = src1
 5 agent1.sinks = sink1
 6 agent1.channels = channel1
 7 
 8 # Describe/configure the source
 9 agent1.sources.src1.type = netcat
10 agent1.sources.src1.bind = 127.0.0.1
11 agent1.sources.src1.port = 44444
12 
13 #Describe the sink
14 agent1.sinks.sink1.type = logger
15 
16 # Use a channel which buffers events in memory
17 agent1.channels.channel1.type = memory
18 agent1.channels.channel1.capacity = 1000
19 agent1.channels.channel1.transactionCapacity = 100
20 
21 # Bind the source and sink to the channel
22 agent1.sources.src1.channels = channel1
23 agent1.sinks.sink1.channel = channel1 

      (4). 在安裝目錄的根目錄,好比個人目錄: /myself_settings/flume1.5.2/apache-flume-1.5.2-bin  執行命令: ./bin/flume-ng agent -n agent1 -c conf -f conf/example0001.conf -Dflume.root.logger=INFO,console ,啓動成功以下圖:

     

   (5). 在啓動成功後,咱們執行telnet命令: telnet localhost 44444,正確鏈接telnet後,依次輸入hello、hello world和hello flume,這時咱們能夠看到剛纔啓動agent的控制檯中就成功接收並輸出了你剛纔輸入的內容,詳細看上圖矩形框選中的部分。

 

      第三步,exec源的使用。這個主要是若是我想實時的接收業務系統的日誌,那麼能夠設置這種源。

   (1). 直接進入conf目錄,配置example0002.conf 配置文件,配置內容以下: 咱們定義了一個名叫agent2的Agent。其中包含了名爲src2的源、名爲channel2的通道以及名爲sink2的接收器。

 1 # example0001.conf: A single-node Flume Configuration
 2 
 3 # Name the components on this agent
 4 agent2.sources = src2
 5 agent2.sinks = sink2
 6 agent2.channels = channel2
 7 
 8 # Describe/configure the source
 9 agent2.sources.src2.type = exec
10 agent2.sources.src2.command = tail -F /test/test.log
11 
12 #Describe the sink
13 agent2.sinks.sink2.type = logger
14 
15 # Use a channel which buffers events in memory
16 agent2.channels.channel2.type = memory
17 agent2.channels.channel2.capacity = 1000
18 agent2.channels.channel2.transactionCapacity = 100
19 
20 # Bind the source and sink to the channel
21 agent2.sources.src2.channels = channel2
22 agent2.sinks.sink2.channel = channel2 

      (2). 結合上面的配置文件,咱們會發現和咱們以前的定義的example1.conf的例子不一樣主要在與九、10行標紅的定義源的類型和方式。結合命令來講,就是若是/test/test.log文件中內容發生變化,那麼就會把新增的數據傳入到當前agent2中。

      (3). 爲了測試上邊的這個例子,在啓動agent2以前,咱們定義一個crontab任務:  */1 * * * * date >> /test/test.log ,每隔一分鐘往/test/test.log中插入一條當前服務器的時間。 

      (4). 在上邊crontab任務執行後,咱們開始啓動agent2:  ./bin/flume-ng agent -n agent2 -c conf -f conf/example0002.conf -Dflume.root.logger=INFO,console。

      (5). 隨着每隔一分鐘test.log中新增的一條時間記錄,agent2的控制檯也會相應的接收並輸出一條記錄,以下圖:

        

       

 

      綜上所述,咱們一塊兒完成了對flume的初步認識,我我的任務若是你是開發,這些基本的瞭解對你來講是必要的,固然若是從這篇文章中看,貌似flume比較簡單,可是我我的以爲單看flume確實沒有太多可說的,可是咱們若是把kafka、flume、storm等實時計算工具融合起來的話,仍是要好好研究研究的。

相關文章
相關標籤/搜索