天天看點

Flume學習之路 (一)Flume的基礎介紹

目錄

  • ​​一、背景​​
  • ​​二、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業務的整體開發流程:

Flume學習之路 (一)Flume的基礎介紹

  從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是一個分布式、可靠、高可用的海量日志聚合系統,支援在系統中定制各類資料發送方,用于收集資料;同時,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 可以從一個地方流向另一個地方,如下圖所示。

Flume學習之路 (一)Flume的基礎介紹

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。

Flume學習之路 (一)Flume的基礎介紹

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學習之路 (一)Flume的基礎介紹

​​回到頂部​​

四、Flume的部署類型

4.1 單一流程

Flume學習之路 (一)Flume的基礎介紹

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

Flume學習之路 (一)Flume的基礎介紹

  

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

4.3 流的合并(多個Agent的資料彙聚到同一個Agent )

Flume學習之路 (一)Flume的基礎介紹

  這種情況應用的場景比較多,比如要收集Web網站的使用者行為日志, Web網站為了可用性使用的負載叢集模式,每個節點都産生使用者行為日志,可以為每 個節點都配置一個Agent來單獨收集日志資料,然後多個Agent将資料最終彙聚到一個用來存儲資料存儲系統,如HDFS上。

4.4 多路複用流(多級流)

  Flume還支援多級流,什麼多級流?來舉個例子,當syslog, java, nginx、 tomcat等混合在一起的日志流開始流入一個agent後,可以agent中将混雜的日志流分開,然後給每種日志建立一個自己的傳輸通道。

Flume學習之路 (一)Flume的基礎介紹

4.5 load balance功能

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

Flume學習之路 (一)Flume的基礎介紹

​​回到頂部​​

五、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      
Flume學習之路 (一)Flume的基礎介紹

(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      
Flume學習之路 (一)Flume的基礎介紹

作者:少帥

您的支援是對部落客最大的鼓勵,感謝您的認真閱讀。