flume简介(大数据技术)
1 .背景
flume是由cloudera軟件公司產(chǎn)出的可分布式日志收集系統(tǒng),后與2009年被捐贈了apache軟件基金會,為hadoop相關(guān)組件之一。尤其近幾年隨著flume的不斷被完善以及升級版本的逐一推出,特別是flume-ng;同時flume內(nèi)部的各種組件不斷豐富,用戶在開發(fā)的過程中使用的便利性得到很大的改善,現(xiàn)已成為apache top項目之一.2 .概述
什么是flume?
apache Flume 是一個從可以收集例如日志,事件等數(shù)據(jù)資源,并將這些數(shù)量龐大的數(shù)據(jù)從各項數(shù)據(jù)資源中集中起來存儲的工具/服務(wù),或者數(shù)集中機制。flume具有高可用,分布式,配置工具,其設(shè)計的原理也是基于將數(shù)據(jù)流,如日志數(shù)據(jù)從各種網(wǎng)站服務(wù)器上匯集起來存儲到HDFS,HBase等集中存儲器中。其結(jié)構(gòu)如下圖所示:
2.應(yīng)用場景
比如我們在做一個電子商務(wù)網(wǎng)站,然后我們想從消費用戶中訪問點特定的節(jié)點區(qū)域來分析消費者的行為或者購買意圖. 這樣我們就可以更加快速的將他想要的推送到界面上,實現(xiàn)這一點,我們需要將獲取到的她訪問的頁面以及點擊的產(chǎn)品數(shù)據(jù)等日志數(shù)據(jù)信息收集并移交給Hadoop平臺上去分析.而Flume正是幫我們做到這一點。現(xiàn)在流行的內(nèi)容推送,比如廣告定點投放以及新聞私人定制也是基于次,不過不一定是使用FLume,畢竟優(yōu)秀的產(chǎn)品很多,比如facebook的Scribe,還有Apache新出的另一個明星項目chukwa,還有淘寶Time Tunnel。3.Flume的優(yōu)勢
1. Flume可以將應(yīng)用產(chǎn)生的數(shù)據(jù)存儲到任何集中存儲器中,比如HDFS,HBase2. 當收集數(shù)據(jù)的速度超過將寫入數(shù)據(jù)的時候,也就是當收集信息遇到峰值時,這時候收集的信息非常大,甚至超過了系統(tǒng)的寫入數(shù)據(jù)能力,這時候,Flume會在數(shù)據(jù)生產(chǎn)者和數(shù)據(jù)收容器間做出調(diào)整,保證其能夠在兩者之間提供一共平穩(wěn)的數(shù)據(jù).3. 提供上下文路由特征4. Flume的管道是基于事務(wù),保證了數(shù)據(jù)在傳送和接收時的一致性.5. Flume是可靠的,容錯性高的,可升級的,易管理的,并且可定制的。Flume具有的特征:
Flume可以高效率的將多個網(wǎng)站服務(wù)器中收集的日志信息存入HDFS/HBase中
使用Flume,我們可以將從多個服務(wù)器中獲取的數(shù)據(jù)迅速的移交給Hadoop中
除了日志信息,Flume同時也可以用來接入收集規(guī)模宏大的社交網(wǎng)絡(luò)節(jié)點事件數(shù)據(jù),比如facebook,twitter,電商網(wǎng)站如亞馬遜,flipkart等
支持各種接入資源數(shù)據(jù)的類型以及接出數(shù)據(jù)類型
支持多路徑流量,多管道接入流量,多管道接出流量,上下文路由等
可以被水平擴展
Flume的結(jié)構(gòu)
事件作為Flume內(nèi)部數(shù)據(jù)傳輸?shù)淖罨締卧?它是由一個轉(zhuǎn)載數(shù)據(jù)的字節(jié)數(shù)組(該數(shù)據(jù)組是從數(shù)據(jù)源接入點傳入,并傳輸給傳輸器,也就是HDFS/HBase)和一個可選頭部構(gòu)成.
典型的Flume 事件如下面結(jié)構(gòu)所示:
我們在將event在私人定制插件時比如:flume-hbase-sink插件是,獲取的就是event然后對其解析,并依據(jù)情況做過濾等,然后在傳輸給HBase或者HDFS.
3.Flume Agent
我們在了解了Flume的外部結(jié)構(gòu)之后,知道了Flume內(nèi)部有一個或者多個Agent,然而對于每一個Agent來說,它就是一共獨立的守護進程(JVM),它從客戶端哪兒接收收集,或者從其他的 Agent哪兒接收,然后迅速的將獲取的數(shù)據(jù)傳給下一個目的節(jié)點sink,或者agent. 如下圖所示flume的基本模型
Agent主要由:source,channel,sink三個組件組成.
Source:
從數(shù)據(jù)發(fā)生器接收數(shù)據(jù),并將接收的數(shù)據(jù)以Flume的event格式傳遞給一個或者多個通道channal,Flume提供多種數(shù)據(jù)接收的方式,比如Avro,Thrift,twitter1%等
Channel:
channal是一種短暫的存儲容器,它將從source處接收到的event格式的數(shù)據(jù)緩存起來,直到它們被sinks消費掉,它在source和sink間起著一共橋梁的作用,channal是一個完整的事務(wù),這一點保證了數(shù)據(jù)在收發(fā)的時候的一致性. 并且它可以和任意數(shù)量的source和sink鏈接. 支持的類型有: JDBC channel , File System channel , Memort channel等.
sink:
sink將數(shù)據(jù)存儲到集中存儲器比如Hbase和HDFS,它從channals消費數(shù)據(jù)(events)并將其傳遞給目標地. 目標地可能是另一個sink,也可能HDFS,HBase.
它的組合形式舉例:
以上介紹的flume的主要組件,下面介紹一下Flume插件:
Interceptors攔截器
用于source和channel之間,用來更改或者檢查Flume的events數(shù)據(jù)
管道選擇器 channels Selectors
在多管道是被用來選擇使用那一條管道來傳遞數(shù)據(jù)(events). 管道選擇器又分為如下兩種:
默認管道選擇器: 每一個管道傳遞的都是相同的events
多路復(fù)用通道選擇器: 依據(jù)每一個event的頭部header的地址選擇管道.
3.sink線程
用于激活被選擇的sinks群中特定的sink,用于負載均衡.
4.Flume與Kafka對比
采集層 主要可以使用Flume, Kafka兩種技術(shù)。
Flume:Flume 是管道流方式,提供了很多的默認實現(xiàn),讓用戶通過參數(shù)部署,及擴展API.
Kafka:Kafka是一個可持久化的分布式的消息隊列。
Kafka 是一個非常通用的系統(tǒng)。你可以有許多生產(chǎn)者和很多的消費者共享多個主題Topics。相比之下,Flume是一個專用工具被設(shè)計為旨在往HDFS,HBase發(fā)送數(shù)據(jù)。它對HDFS有特殊的優(yōu)化,并且集成了Hadoop的安全特性。所以,Cloudera 建議如果數(shù)據(jù)被多個系統(tǒng)消費的話,使用kafka;如果數(shù)據(jù)被設(shè)計給Hadoop使用,使用Flume。正如你們所知Flume內(nèi)置很多的source和sink組件。然而,Kafka明顯有一個更小的生產(chǎn)消費者生態(tài)系統(tǒng),并且Kafka的社區(qū)支持不好。希望將來這種情況會得到改善,但是目前:使用Kafka意味著你準備好了編寫你自己的生產(chǎn)者和消費者代碼。如果已經(jīng)存在的Flume Sources和Sinks滿足你的需求,并且你更喜歡不需要任何開發(fā)的系統(tǒng),請使用Flume。Flume可以使用攔截器實時處理數(shù)據(jù)。這些對數(shù)據(jù)屏蔽或者過量是很有用的。Kafka需要外部的流處理系統(tǒng)才能做到。Kafka和Flume都是可靠的系統(tǒng),通過適當?shù)呐渲媚鼙WC零數(shù)據(jù)丟失。然而,Flume不支持副本事件。于是,如果Flume代理的一個節(jié)點崩潰了,即使使用了可靠的文件管道方式,你也將丟失這些事件直到你恢復(fù)這些磁盤。如果你需要一個高可靠行的管道,那么使用Kafka是個更好的選擇。Flume和Kafka可以很好地結(jié)合起來使用。如果你的設(shè)計需要從Kafka到Hadoop的流數(shù)據(jù),使用Flume代理并配置Kafka的Source讀取數(shù)據(jù)也是可行的:你沒有必要實現(xiàn)自己的消費者。你可以直接利用Flume與HDFS及HBase的結(jié)合的所有好處。你可以使用Cloudera Manager對消費者的監(jiān)控,并且你甚至可以添加攔截器進行一些流處理。Flume和Kafka可以結(jié)合起來使用。通常會使用Flume + Kafka的方式。其實如果為了利用Flume已有的寫HDFS功能,也可以使用Kafka + Flume的方式。
總結(jié)
以上是生活随笔為你收集整理的flume简介(大数据技术)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: PHP怎么做一个加法口诀,神奇的手指速算
- 下一篇: 【历史上的今天】8 月 24 日:Win