目錄
- 一、背景
- 二、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還支援多級流,什麼多級流?來舉個例子,當syslog, java, nginx、 tomcat等混合在一起的日志流開始流入一個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
作者:少帥
您的支援是對部落客最大的鼓勵,感謝您的認真閱讀。