1. 程式人生 > >【轉載】Flume學習之路 (一)Flume的基礎介紹

【轉載】Flume學習之路 (一)Flume的基礎介紹

必須 4.3 bin tar.gz 開源 暴露 linu ror 失敗

討論QQ:1586558083

目錄

  • 一、背景
  • 二、Flume的簡介
  • 三、Flume NG的介紹
    • 3.1 Flume特點
    • 3.2 Flume的一些核心概念
    • 3.3 Flume NG的體系結構
    • 3.4 Source
    • 3.5 Channel
    • 3.6 Sink
  • 四、Flume的部署類型
    • 4.1 單一流程
    • 4.2 多代理流程(多個agent順序連接)
    • 4.3 流的合並(多個Agent的數據匯聚到同一個Agent )
    • 4.4 多路復用流(多級流)
    • 4.5 load balance功能
  • 五、Flume的安裝
    • 5.1 Flume的下載
    • 5.2 Flume的安裝

正文

回到頂部

一、背景

Hadoop業務的整體開發流程:

技術分享圖片

  從Hadoop的業務開發流程圖中可以看出,在大數據的業務處理過程中,對於數據的采集是十分重要的一步,也是不可避免的一步.

許多公司的平臺每天會產生大量的日誌(一般為流式數據,如,搜索引擎的pv,查詢等),處理這些日誌需要特定的日誌系統,一般而言,這些系統需要具有以下特征:

(1) 構建應用系統和分析系統的橋梁,並將它們之間的關聯解耦;

(2) 支持近實時的在線分析系統和類似於Hadoop之類的離線分析系統;

(3) 具有高可擴展性。即:當數據量增加時,可以通過增加節點進行水平擴展。

開源的日誌系統,包括facebook的scribe,apache的chukwa,linkedin的kafka和cloudera的flume等。

回到頂部

二、Flume的簡介

  flume 作為 cloudera 開發的實時日誌收集系統,受到了業界的認可與廣泛應用。Flume 初始的發行版本目前被統稱為 Flume OG(original generation),屬於 cloudera。

  但隨著 FLume 功能的擴展,Flume OG 代碼工程臃腫、核心組件設計不合理、核心配置不標準等缺點暴露出來,尤其是在 Flume OG 的最後一個發行版本 0.9.4. 中,日

誌傳輸不穩定的現象尤為嚴重,為了解決這些問題,2011 年 10 月 22 號,cloudera 完成了 Flume-728,對 Flume 進行了裏程碑式的改動:重構核心組件、核心配置以

及代碼架構,重構後的版本統稱為 Flume NG(next generation);改動的另一原因是將 Flume 納入 apache 旗下,cloudera Flume 改名為 Apache Flume。

  Flume是Apache的頂級項目,官方網站:http://flume.apache.org/

技術分享圖片

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

Flume 在0.9.x and 1.x之間有較大的架構調整,1.x版本之後的改稱Flume NG,0.9.x的稱為Flume OG。

  Flume目前只有Linux系統的啟動腳本,沒有Windows環境的啟動腳本。

回到頂部

三、Flume NG的介紹

3.1 Flume特點

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

  flume的數據流由事件(Event)貫穿始終。事件是Flume的基本數據單位,它攜帶日誌數據(字節數組形式)並且攜帶有頭信息,這些Event由Agent外部的Source生成,當Source捕獲事件後會進行特定的格式化,然後Source會把事件推入(單個或多個)Channel中。你可以把Channel看作是一個緩沖區,它將保存事件直到Sink處理完該事件。Sink負責持久化日誌或者把事件推向另一個Source。

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

 (2)flume的可恢復性
  還是靠Channel。推薦使用FileChannel,事件持久化在本地文件系統裏(性能較差)。

3.2 Flume的一些核心概念

  Client:Client生產數據,運行在一個獨立的線程。

  Event: 一個數據單元,消息頭和消息體組成。(Events可以是日誌記錄、 avro 對象等。)
  Flow: Event從源點到達目的點的遷移的抽象。
  Agent: 一個獨立的Flume進程,包含組件Source、 Channel、 Sink。(Agent使用JVM 運行Flume。每臺機器運行一個agent,但是可以在一個agent中包含

      多個sources和sinks。)
  Source: 數據收集組件。(source從Client收集數據,傳遞給Channel)
  Channel: 中轉Event的一個臨時存儲,保存由Source組件傳遞過來的Event。(Channel連接 sources 和 sinks ,這個有點像一個隊列。)
  Sink: 從Channel中讀取並移除Event, 將Event傳遞到FlowPipeline中的下一個Agent(如果有的話)(Sink從Channel收集數據,運行在一個獨立線程。)

3.3 Flume NG的體系結構

 Flume 運行的核心是 Agent。Flume以agent為最小的獨立運行單位。一個agent就是一個JVM。它是一個完整的數據收集工具,含有三個核心組件,分別是

 source、 channel、 sink。通過這些組件, Event 可以從一個地方流向另一個地方,如下圖所示。

技術分享圖片

3.4 Source

  Source是數據的收集端,負責將數據捕獲後進行特殊的格式化,將數據封裝到事件(event) 裏,然後將事件推入Channel中。

  Flume提供了各種source的實現,包括Avro Source、Exce Source、Spooling Directory Source、NetCat Source、Syslog Source、Syslog TCP Source、Syslog UDP Source、HTTP Source、HDFS Source,etc。如果內置的Source無法滿足需要, Flume還支持自定義Source。

技術分享圖片

3.5 Channel

  Channel是連接Source和Sink的組件,大家可以將它看做一個數據的緩沖區(數據隊列),它可以將事件暫存到內存中也可以持久化到本地磁盤上, 直到Sink處理完該事件。

Flume對於Channel,則提供了Memory Channel、JDBC Chanel、File Channel,etc。

  MemoryChannel可以實現高速的吞吐,但是無法保證數據的完整性。

  MemoryRecoverChannel在官方文檔的建議上已經建義使用FileChannel來替換。

  FileChannel保證數據的完整性與一致性。在具體配置不現的FileChannel時,建議FileChannel設置的目錄和程序日誌文件保存的目錄設成不同的磁盤,以便提高效率。

3.6 Sink

  Flume Sink取出Channel中的數據,進行相應的存儲文件系統,數據庫,或者提交到遠程服務器。

  Flume也提供了各種sink的實現,包括HDFS sink、Logger sink、Avro sink、File Roll sink、Null sink、HBase sink,etc。

  Flume Sink在設置存儲數據時,可以向文件系統中,數據庫中,hadoop中儲數據,在日誌數據較少時,可以將數據存儲在文件系中,並且設定一定的時間間隔保存數據。在日誌數據較多時,可以將相應的日誌數據存儲到Hadoop中,便於日後進行相應的數據分析。

技術分享圖片

回到頂部

四、Flume的部署類型

4.1 單一流程

技術分享圖片

4.2 多代理流程(多個agent順序連接

技術分享圖片  

  可以將多個Agent順序連接起來,將最初的數據源經過收集,存儲到最終的存儲系統中。這是最簡單的情況,一般情況下,應該控制這種順序連接的Agent 的數量,因為數據流經的路徑變長了,如果不考慮failover的話,出現故障將影響整個Flow上的Agent收集服務。

4.3 流的合並(多個Agent的數據匯聚到同一個Agent

技術分享圖片

  這種情況應用的場景比較多,比如要收集Web網站的用戶行為日誌, Web網站為了可用性使用的負載集群模式,每個節點都產生用戶行為日誌,可以為每 個節點都配置一個Agent來單獨收集日誌數據,然後多個Agent將數據最終匯聚到一個用來存儲數據存儲系統,如HDFS上。

4.4 多路復用流(多級流)

  Flume還支持多級流,什麽多級流?來舉個例子,當syslogjavanginxtomcat等混合在一起的日誌流開始流入一個agent後,可以agent中將混雜的日誌流分開,然後給每種日誌建立一個自己的傳輸通道。

技術分享圖片

4.5 load balance功能

  下圖Agent1是一個路由節點,負責將Channel暫存的Event均衡到對應的多個Sink組件上,而每個Sink組件分別連接到一個獨立的Agent上 。

技術分享圖片

回到頂部

五、Flume的安裝

5.1 Flume的下載

下載地址:

http://mirrors.hust.edu.cn/apache/

http://flume.apache.org/download.html

5.2 Flume的安裝

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

(1)將安裝包上傳到服務器並解壓

[hadoop@hadoop1 ~]$ tar -zxvf apache-flume-1.8.0-bin.tar.gz -C apps/

(2)創建軟連接

[hadoop@hadoop1 ~]$ ln -s apache-flume-1.8.0-bin/ flume

(3)修改配置文件

/home/hadoop/apps/apache-flume-1.8.0-bin/conf

[hadoop@hadoop1 conf]$ cp flume-env.sh.template flume-env.sh

技術分享圖片

(4)配置環境變量

[hadoop@hadoop1 conf]$ vi ~/.bashrc 
#FLUME
export FLUME_HOME=/home/hadoop/apps/flume
export PATH=$PATH:$FLUME_HOME/bin

保存使其立即生效

[hadoop@hadoop1 conf]$ source ~/.bashrc 

(5)查看版本

[hadoop@hadoop1 ~]$ flume-ng version

技術分享圖片

轉載自https://www.cnblogs.com/qingyunzong/p/8994494.html

【轉載】Flume學習之路 (一)Flume的基礎介紹