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