* 關于本產品的分類與介紹僅供參考,精準產品資料以官網介紹為準,如需購買請先行測試。
從Hadoop的業務開發流程圖中可以看出,在大數據的業務處理過程中,對于數據的采集是十分重要的一步,也是不可避免的一步,從而引出我們本文的主角—Flume。本文將圍繞Flume的架構、Flume的應用(日志采集)進行詳細的介紹。
1、Flume的概念
flume是分布式的日志收集系統,它將各個服務器中的數據收集起來并送到指定的地方去,比如說送到圖中的HDFS,簡單來說flume就是收集日志的。
2、Event的概念
在這里有必要先介紹一下flume中event的相關概念:flume的核心是把數據從數據源(source)收集過來,在將收集到的數據送到指定的目的地(sink)。為了保證輸送的過程一定成功,在送到目的地(sink)之前,會先緩存數據(channel),待數據真正到達目的地(sink)后,flume在刪除自己緩存的數據。
在整個數據的傳輸的過程中,流動的是event,即事務保證是在event級別進行的。那么什么是event呢?—–event將傳輸的數據進行封裝,是flume傳輸數據的基本單位,如果是文本文件,通常是一行記錄,event也是事務的基本單位。event從source,流向channel,再到sink,本身為一個字節數組,并可攜帶headers(頭信息)信息。event代表著一個數據的最小完整單元,從外部數據源來,向外部的目的地去。
3、flume架構介紹
flume之所以這么神奇,是源于它自身的一個設計,這個設計就是agent,agent本身是一個Java進程,運行在日志收集節點—所謂日志收集節點就是服務器節點。
agent里面包含3個核心的組件:source—->channel—–>sink,類似生產者、倉庫、消費者的架構。
source:source組件是專門用來收集數據的,可以處理各種類型、各種格式的日志數據,包括avro、thrift、exec、jms、spooling directory、netcat、sequence generator、syslog、http、legacy、自定義。
channel:source組件把數據收集來以后,臨時存放在channel中,即channel組件在agent中是專門用來存放臨時數據的——對采集到的數據進行簡單的緩存,可以存放在memory、jdbc、file等等。
sink:sink組件是用于把數據發送到目的地的組件,目的地包括hdfs、logger、avro、thrift、ipc、file、null、Hbase、solr、自定義。
4、flume的運行機制
flume的核心就是一個agent,這個agent對外有兩個進行交互的地方,一個是接受數據的輸入——source,一個是數據的輸出sink,sink負責將數據發送到外部指定的目的地。source接收到數據之后,將數據發送給channel,chanel作為一個數據緩沖區會臨時存放這些數據,隨后sink會將channel中的數據發送到指定的地方—-例如HDFS等,注意:只有在sink將channel中的數據成功發送出去之后,channel才會將臨時數據進行刪除,這種機制保證了數據傳輸的可靠性與安全性。
5、flume的廣義用法
flume之所以這么神奇—-其原因也在于flume可以支持多級flume的agent,即flume可以前后相繼,例如sink可以將數據寫到下一個agent的source中,這樣的話就可以連成串了,可以整體處理了。flume還支持扇入(fan-in)、扇出(fan-out)。所謂扇入就是source可以接受多個輸入,所謂扇出就是sink可以將數據輸出多個目的地destination中。
對于flume的原理其實很容易理解,我們更應該掌握flume的具體使用方法,flume提供了大量內置的Source、Channel和Sink類型。而且不同類型的Source、Channel和Sink可以自由組合—–組合方式基于用戶設置的配置文件,非常靈活。比如:Channel可以把事件暫存在內存里,也可以持久化到本地硬盤上。Sink可以把日志寫入HDFS, HBase,甚至是另外一個Source等等。下面我將用具體的案例詳述flume的具體用法。
其實flume的用法很簡單—-書寫一個配置文件,在配置文件當中描述source、channel與sink的具體實現,而后運行一個agent實例,在運行agent實例的過程中會讀取配置文件的內容,這樣flume就會采集到數據。
更新時間:2017-04-28 14:23:13.000 | 錄入時間:2017-04-28 14:21:24.000 | 責任編輯:陳俊吉