0127 Flume日誌收集

一、Flume介紹

Flume是一個分佈式、可靠、和高可用的海量日誌聚合的系統,支持在系統中定製各類數據發送方,用於收集數據;同時,Flume提供對數據進行簡單處理,並寫到各種數據接受方(可定製)的能力。

設計目標:

(1) 可靠性

當節點出現故障時,日誌能夠被傳送到其他節點上而不會丟失。Flume提供了三種級別的可靠性保障,從強到弱依次分別爲:end-to-end(收到數據agent首先將event寫到磁盤上,當數據傳送成功後,再刪除;如果數據發送失敗,可以重新發送。),Store on failure(這也是scribe採用的策略,當數據接收方crash時,將數據寫到本地,待恢復後,繼續發送),Best effort(數據發送到接收方後,不會進行確認)。

(2) 可擴展性

Flume採用了三層架構,分別爲agent,collector和storage,每一層均可以水平擴展。其中,所有agent和collector由master統一管理,這使得系統容易監控和維護,且master允許有多個(使用ZooKeeper進行管理和負載均衡),這就避免了單點故障問題。

(3) 可管理性

所有agent和colletor由master統一管理,這使得系統便於維護。多master情況,Flume利用ZooKeeper和gossip,保證動態配置數據的一致性。用戶可以在master上查看各個數據源或者數據流執行情況,且可以對各個數據源配置和動態加載。Flume提供了web 和shell script command兩種形式對數據流進行管理。

(4) 功能可擴展性

用戶可以根據需要添加自己的agent,collector或者storage。此外,Flume自帶了很多組件,包括各種agent(file, syslog等),collector和storage(file,HDFS等)。

二、Flume架構

flume的邏輯架構:


正如前面提到的,Flume採用了分層架構:分別爲agent,collector和storage。其中,agent和collector均由兩部分組成:source和sink,source是數據來源,sink是數據去向

Flume使用兩個組件:Master和Node,Node根據在Master shell或web中動態配置,決定其是作爲Agent還是Collector。

(1) agent

agent的作用是將數據源的數據發送給collector。

Flume自帶了很多直接可用的數據源(source),如:

  • text(“filename”):將文件filename作爲數據源,按行發送
  • tail(“filename”):探測filename新產生的數據,按行發送出去
  • fsyslogTcp(5140):監聽TCP的5140端口,並且接收到的數據發送出去
  • tailDir("dirname"[, fileregex=".*"[, startFromEnd=false[, recurseDepth=0]]]):監聽目錄中的文件末尾,使用正則去選定需要監聽的文件(不包含目錄),recurseDepth爲遞歸監聽其下子目錄的深度

更多可參見這位朋友的整理:http://www.cnblogs.com/zhangmiao-chp/archive/2011/05/18/2050465.html

同時提供了很多sink,如:

  • console[("format")] :直接將將數據顯示在consolr上
  • text(“txtfile”):將數據寫到文件txtfile中
  • dfs(“dfsfile”):將數據寫到HDFS上的dfsfile文件中
  • syslogTcp(“host”,port):將數據通過TCP傳遞給host節點
  • agentSink[("machine"[,port])]:等價於agentE2ESink,如果省略,machine參數,默認使用flume.collector.event.host與flume.collector.event.port作爲默認collecotr
  • agentDFOSink[("machine" [,port])]:本地熱備agent,agent發現collector節點故障後,不斷檢查collector的存活狀態以便重新發送event,在此間產生的數據將緩存到本地磁盤中
  • agentBESink[("machine"[,port])]:不負責的agent,如果collector故障,將不做任何處理,它發送的數據也將被直接丟棄
  • agentE2EChain:指定多個collector提高可用性。 當向主collector發送event失效後,轉向第二個collector發送,當所有的collector失敗後,它會非常執着的再來一遍

更多可參見這位朋友的整理:http://www.cnblogs.com/zhangmiao-chp/archive/2011/05/18/2050472.html

(2) collector

collector的作用是將多個agent的數據彙總後,加載到storage中。

它的source和sink與agent類似。

數據源(source),如:

  • collectorSource[(port)]:Collector source,監聽端口匯聚數據
  • autoCollectorSource:通過master協調物理節點自動匯聚數據
  • logicalSource:邏輯source,由master分配端口並監聽rpcSink

sink,如:

  • collectorSink( "fsdir","fsfileprefix",rollmillis):collectorSink,數據通過collector匯聚之後發送到hdfs, fsdir 是hdfs目錄,fsfileprefix爲文件前綴碼
  • customdfs("hdfspath"[, "format"]):自定義格式dfs

(3) storage

storage是存儲系統,可以是一個普通file,也可以是HDFS,HIVE,HBase,分佈式存儲等。

(4) Master

Master是管理協調agent和collector的配置等信息,是flume集羣的控制器。

 

在Flume中,最重要的抽象是data flow(數據流),data flow描述了數據從產生,傳輸、處理並最終寫入目標的一條路徑。


  1. 對於agent數據流配置就是從哪得到數據,把數據發送到哪個collector。
  2. 對於collector是接收agent發過來的數據,把數據發送到指定的目標機器上。

注:Flume框架對hadoop和zookeeper的依賴只是在jar包上,並不要求flume啓動時必須將hadoop和zookeeper服務也啓動。

三、Flume分佈式環境部署

1.實驗場景

  • 操作系統版本:RedHat 5.6
  • Hadoop版本:0.20.2
  • Jdk版本:jdk1.6.0_26
  • 安裝flume版本:flume-distribution-0.9.4-bin

部署flume在集羣上,按照如下步驟:

  1. 在集羣上的每臺機器上安裝flume
  2. 選擇一個或多個節點當做master
  3. 修改靜態配置文件
  4. 在至少一臺機器上啓動一個master ,所有節點啓動flume node
  5. 動態配置

需要在集羣的每臺機器上部署Flume。

注意:flume集羣整個集羣的網絡環境要保證穩定,可靠,否則會出現一些莫名錯誤(比如:agent端發送不了數據到collector)。

1.Flume環境安裝

$wget http://cloud.github.com/downloads/cloudera/flume/flume-distribution-0.9.4-bin.tar.gz
$tar -xzvf flume-distribution-0.9.4-bin.tar.gz
$cp -rf flume-distribution-0.9.4-bin /usr/local/flume
$vi /etc/profile  #添加環境配置
    export FLUME_HOME=/usr/local/flume
    export PATH=.:$PATH::$FLUME_HOME/bin
$source /etc/profile

$flume #驗證安裝

 

2.選擇一個或多個節點當做master

對於master的選擇情況,可以在集羣上定義一個master,也可以爲了提高可用性選擇多個節點做爲master。

  • 單點master模式:容易管理,但在系統的容錯和擴展性有缺陷
  • 多點master模式:通常是運行3/5個master,能很好的容錯

Flume master數量的選擇原則

      分佈式的master能夠繼續正常工作不會崩潰的前提是正常工作的master數量超過總master數量的一半。

Flume master 的作用主要有兩個:

  • 跟蹤各節點的配置情況,通知節點配置的改變;
  • 跟蹤來自flow的結尾操控在可靠模式下(E2E)的信息,以至於讓flow的源頭知道什麼時候停止傳輸event。

 

3.修改靜態配置文件

site-specific設置對於flume節點和master通過在每一個集羣節點的conf/flume-site.xml是可配置的,如果這個文件不存在,設置的屬性默認的在conf/flume­-conf.xml中,在接下來的例子中,在flume的節點上設置master名,讓節點自己去尋找叫“master”的flume Master。

<?xml version="1.0"?>
    <?xml-stylesheet type="text/xsl"  href="configuration.xsl"?>
    <configuration>
        <property>
            <name>flume.master.servers</name>
            <value>master</value>
         </property>
    </configuration>

在多master的情況下需要如下配置:

<property>
    <name>flume.master.servers</name>
   <value>hadoopmaster.com,hadoopedge.com,datanode4.com</value>
    <description>A comma-separated list of hostnames, one for each machine in the Flume Master.</description>
</property>
<property>
    <name>flume.master.store</name>
    <value>zookeeper</value>
    <description>How the Flume Master stores node configurations. Must be either 'zookeeper' or 'memory'.</description>
</property>
<property>
    <name>flume.master.serverid</name>
    <value>2</value>
    <description>The unique identifier for a machine in a Flume Master ensemble. Must be different on every master instance.</description>
</property>

注意:flume.master.serverid 屬性的配置主要是針對master,集羣上Master節點的flume.master.serverid 必須是不能相同的,該屬性的值以0開始。

當使用agent角色時,你可以通過添加下面的配置文件在flume-conf.xml中,來設置默認的collector主機:

<property>
    <name>flume.collector.event.host</name>
    <value>collector</value>
    <description>This is the host name of the default "remote"  collector.</description>
</property>
<property>
    <name>flume.collector.port</name>
    <value>35853</value>
    <description>This default tcp port that the collector listens to in order to receive events it is collecting.</description>
</property>

關於配置可參見:http://www.cnblogs.com/zhangmiao-chp/archive/2011/05/18/2050443.html

 

4.啓動集羣

集羣上節點啓動:

  1. 在命令行輸入:flume master 啓動master節點
  2. 在命令行輸入:flume node –n nodeName 啓動其他節點,nodeName最好根據集羣邏輯的劃分來取名子,這樣在 master進行配置的時候比較清晰。

名字規則自己定義,方便記憶和動態配置即可(後續會有介紹動態配置)




轉載自:http://www.cnblogs.com/Leo_wl/archive/2012/05/25/2518716.html

http://www.cnblogs.com/oubo/archive/2012/05/25/2517751.html

發佈了21 篇原創文章 · 獲贊 8 · 訪問量 6萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章