Hadoop業務的總體開發流程:node
從Hadoop的業務開發流程中能夠看出,在大數據的業務處理流程中,對於數據的採集是十分重要的一步,也是不可避免的一步。apache
許多公司的平臺天天會產生大量的日誌(通常爲流式數據,如搜索引擎的pv,查詢等),處理這些日誌須要特定的日誌系統。通常而言,這些系統須要具備以下的特徵:數組
開源的日誌系統,包括facebook的scribe,apache的chukwa,linkedin的kafka和cloudera的flume等。bash
flume是一個分佈式、可靠、和高可用的海量日誌採集、聚合和傳輸的系統。支持在日誌系統中定製各種數據發送方,用於收集數據;同時,Flume提供對數據進行簡單處理、並寫入到各類數據接收方(好比文本、HDFS、Hbase等)的能力。服務器
flume的數據流由事件(Event)貫穿始終。事件是Flume的基本數據單位,它攜帶日誌數據(字節數組形式)而且攜帶有頭信息。這些Event由Agent外部的Source生成。當Source捕獲事件後會進行特定的格式化,而後source會把事件推入(單個活多個)Channel中。能夠把Channel看做是一個緩衝區,它將保存事件直到slink處理完該事件。Sink負責持久化日誌或者把事件推向另外一個Source.app
Flume的可靠性框架
當節點出現故障時,日誌可以被傳送到其餘節點上而不會丟失。Flume提供了三種級別的可靠性保障,從強到弱依次分別爲:end-end(收到數據agent首先將event寫到磁盤上,當數據傳送成功後,再刪除;若是數據發送失敗,能夠從新發送),store on failure(這也是scribe採用的策略,當數據接收方crash時,將數據寫到本地,待恢復後,繼續發送),Besteffort(數據發送到接收方後,不會進行確認)。分佈式
Flume的可恢復性工具
仍是靠Channel。推薦使用FileChannel,事件持久化在本地文件系統裏(性能較差)。oop
Client:clinet生產數據,運行在一個獨立的線程。
Event:一個數據單元,消息頭和消息體組成。(Event能夠是日誌記錄,avro對象等。)
Flow:Event從源頭到達目的地的遷移的抽象
Agent:一個獨立的Flume進程,包含組件Source、Channel、Sink。(Agent使用JVM運行Flume。每臺機器運行一個agent,可是能夠在一個agent中包含多個sources和sinks)
Source:數據收集組件。(Source從Client收集數據,傳遞給Channel)
sink:從Channel中讀取並移除Event,將Event傳遞到FlowPipeLine中的下一個Agent(若是有的話)(Sink從channel收集數據,運行在一個獨立線程。)
Flume運行的核心是Agent。Flume以Agent爲最小的獨立運行單位。一個Agent就是一個JVM。它是一個完整的數據收集工具,包含三個核心組件,分別是source、channel、sink。經過這些組件,Event能夠從一個地方流向另外一個地方,以下圖所示:
下載地址:
http://mirrors.hust.edu.cn.apace
Flume框架對hadoop和zookeeper的依賴只是在jar包上,並不要求flume啓動時必須將hadoop和zookeeper服務也啓動。
tar -zxvf apache-flume-1.7.0-bin.tar.gz -C /home/app/
[root@node01 conf]# cp flume-env.sh.template flume-env.sh
vi /etc/profile
保存使其生效
source /etc/profile
flume-ng version