付宇
摘 要:隨著大數(shù)據(jù)、社交網(wǎng)絡(luò)、云計(jì)算等技術(shù)不斷融入我們的生活以及現(xiàn)有的計(jì)算能力、存儲(chǔ)空間、網(wǎng)絡(luò)帶寬的高速發(fā)展,人類積累的數(shù)據(jù)在互聯(lián)網(wǎng)、通信、金融、商業(yè)、醫(yī)療等諸多領(lǐng)域不斷地增長(zhǎng)和累積。在大數(shù)裾學(xué)習(xí)、開(kāi)發(fā)過(guò)程中,會(huì)產(chǎn)生各種各樣的數(shù)據(jù)源信息,如網(wǎng)站流量日志分析系統(tǒng)產(chǎn)生的日志數(shù)據(jù),這些數(shù)據(jù)的收集、監(jiān)聽(tīng)、使用非常重要。針對(duì)類似業(yè)務(wù)需求,通常會(huì)使用 Apache旗下的Flume日志采集系統(tǒng)完成相關(guān)數(shù)據(jù)采集工作。本文主要對(duì)Flume大數(shù)據(jù)日志采集系統(tǒng)進(jìn)行介紹。
關(guān)鍵詞:大數(shù)據(jù);Flume;日志采集
近幾年來(lái),隨著計(jì)算機(jī)和信息技術(shù)的迅猛發(fā)展和普及應(yīng)用,行業(yè)應(yīng)用系統(tǒng)的規(guī)模迅速擴(kuò)大,行業(yè)應(yīng)用所產(chǎn)生的數(shù)據(jù)呈爆炸性增長(zhǎng)。動(dòng)輒達(dá)到數(shù)百TB甚至數(shù)十至數(shù)百PB規(guī)模的行業(yè)/企業(yè)大數(shù)據(jù)已遠(yuǎn)遠(yuǎn)超出了現(xiàn)有傳統(tǒng)的計(jì)算技術(shù)和信息系統(tǒng)的處理能力。如何對(duì)產(chǎn)生的大數(shù)據(jù)進(jìn)行采集是大數(shù)據(jù)處理面臨的問(wèn)題之一。Apache Flume是一個(gè)高可靠、高可用的分布式系統(tǒng),用于高效地從許多不同的數(shù)據(jù)源收集、聚合大批量的日志數(shù)據(jù),進(jìn)行集中式存儲(chǔ)。Flume最早是Cloudera公司提供的一個(gè)高可用的、高可靠的、分布式海量日志采集、聚合和傳輸系統(tǒng),之后納入到了 Apache旗下,作為一個(gè)頂級(jí)開(kāi)源項(xiàng)目。Apache Flume不僅只限于日志數(shù)據(jù)的采集,由于Flume采集的數(shù)據(jù)源是可定制的,因此Flume還可用于傳輸大量事件數(shù)據(jù),包括但不限于網(wǎng)絡(luò)流量數(shù)據(jù)、社交媒體生成的數(shù)據(jù)、電子郵件消息以及幾乎任何可能的數(shù)據(jù)源。本文接下來(lái)主要對(duì)Flume的架構(gòu)和相關(guān)組件進(jìn)行介紹。
1 ?Flume的運(yùn)行機(jī)制和系統(tǒng)結(jié)構(gòu)
1.1Flume運(yùn)行機(jī)制
Flume中有3個(gè)核心組件,它們分別是數(shù)據(jù)采集器(Source)、緩沖通道(Channel)以及接收器(Sink)。Flume的核心運(yùn)行機(jī)制就是把數(shù)據(jù)從數(shù)據(jù)源,例如Web Server,通過(guò)數(shù)據(jù)采集器(Source)收集過(guò)來(lái),再將收集的數(shù)據(jù)通過(guò)緩沖通道(Channel)匯集到指定的接收器(Sink)。Flume的基本架構(gòu)中有一個(gè)Agent,它是Flume的核心角色,F(xiàn)lume Agent是一個(gè)JVM進(jìn)程,它承載著將數(shù)據(jù)從外部數(shù)據(jù)源流向下一個(gè)目標(biāo)的3個(gè)核心組件Source、Channel和Sink。
數(shù)據(jù)采集器Source用于源數(shù)據(jù)的采集,(例如從一個(gè)Web服務(wù)器采集源數(shù)據(jù)),然后將采集到的數(shù)據(jù)寫入到Channel中并流向Sink。
緩沖通道Channel是一個(gè)緩沖隊(duì)列,它用來(lái)對(duì)Source中的數(shù)據(jù)進(jìn)行緩存,并將數(shù)據(jù)髙效、準(zhǔn)確地寫人Sink,當(dāng)數(shù)據(jù)全部寫入Sink后,F(xiàn)lume就會(huì)刪除該緩存通道中的數(shù)據(jù)。
接收器Sink接收并匯集流向Sink的所有數(shù)據(jù)。根據(jù)需求,可以直接對(duì)數(shù)據(jù)進(jìn)行集中式存儲(chǔ)(例如采用HDFS進(jìn)行存儲(chǔ)),也可以繼續(xù)作為數(shù)據(jù)源傳入其他遠(yuǎn)程服務(wù)器或者Source中。
在整個(gè)數(shù)據(jù)傳輸?shù)倪^(guò)程中,F(xiàn)lume會(huì)將流動(dòng)的數(shù)據(jù)封裝到一個(gè)event中,event是Flume內(nèi)部數(shù)據(jù)傳輸?shù)幕締卧R粋€(gè)完整的event包含headers和body,其中headers包含了一些標(biāo)識(shí)信息,而body中就是Flume收集到的數(shù)據(jù)信息。
1.2Flume系統(tǒng)結(jié)構(gòu)
在實(shí)際開(kāi)發(fā)中,F(xiàn)lume需要采集數(shù)據(jù)的類型多種多樣,同時(shí)還會(huì)進(jìn)行不同的中間操作,所以根據(jù)具體需求,可以將Flume日志采集系統(tǒng)分為簡(jiǎn)單結(jié)構(gòu)和復(fù)雜結(jié)構(gòu)。
當(dāng)我們需要采集的數(shù)據(jù)源比較單一、簡(jiǎn)單的時(shí)候,可以直接使用一個(gè)Agent來(lái)進(jìn)行數(shù)據(jù)采集并最終存儲(chǔ),這就是簡(jiǎn)單結(jié)構(gòu)。
接下來(lái)介紹復(fù)雜結(jié)構(gòu),有時(shí)候Flume需要采集的數(shù)據(jù)源分布在不同的服務(wù)器上,使用一個(gè)Agent進(jìn)行數(shù)據(jù)采集就不再適用,這時(shí),就可以根據(jù)業(yè)務(wù)需求部署多個(gè)Agent進(jìn)行數(shù)據(jù)采集,在開(kāi)發(fā)中還有可能遇到Flume從同一個(gè)服務(wù)端采集數(shù)據(jù),然后通過(guò)多路復(fù)用流分別傳輸并存儲(chǔ)到不同目的地的情況,這就是復(fù)雜結(jié)構(gòu)。
2 Flume核心組件
2.1 Flume Sources
在Flume日志采集系統(tǒng)中,采集方案是開(kāi)發(fā)者需要編寫的核心部分,而在采集方案中需要根據(jù)不同需求來(lái)分別針對(duì)Source、Channel和Sink進(jìn)行配置。
在編寫Flume采集方案時(shí),首先必須明確的是采集的數(shù)據(jù)源的類型以及出處,接著,根據(jù)這些信息與Flume已提供支持的Flume Sources類型進(jìn)行匹配,選擇對(duì)應(yīng)的數(shù)據(jù)采集器類型,也就是type屬性;然后,再根據(jù)選擇的數(shù)據(jù)采集器類型,配置必要和非必要的數(shù)據(jù)采集器屬性,完成Flume Sources的配置。比較常見(jiàn)的Sources類型有Avro Source,它可以創(chuàng)建分層集合拓?fù)洌肁vro Source可以實(shí)現(xiàn)多級(jí)流動(dòng)、扇出流、扇入流等效果。
2.2 Flume Channels
Channels通道是event在Agent上暫存的存儲(chǔ)庫(kù),Source向Channel中添加event,Sink在讀取完數(shù)據(jù)后再刪除它。在配置Channels時(shí),需要明確的是將要傳輸?shù)膕ources數(shù)據(jù)源類型;接著,根據(jù)這些信息并結(jié)合開(kāi)發(fā)中的實(shí)際需求,選擇Flume已提供支持的Flume Channels;然后,再根據(jù)選擇的Channel類型,配置必要和非必要的Channel屬性。比較常見(jiàn)的Channels類型有Memory Channel和File Channel。Memory Channel會(huì)將event存儲(chǔ)在具有可配置最大尺寸的內(nèi)存隊(duì)列中,它非常適用于需要更高吞吐量的流量。File Channel是Flume的持久通道,它將所有event寫人磁盤,因此不會(huì)丟失進(jìn)程或機(jī)器關(guān)機(jī)、崩潰時(shí)的數(shù)據(jù)。
2.3 Flume Sinks
Flume Sources采集到的數(shù)據(jù)通過(guò)Channels就會(huì)流向Sink中,此時(shí)的Sink類似一個(gè)采集到的數(shù)據(jù)集結(jié)的遞進(jìn)中心,它需要根據(jù)后續(xù)需求進(jìn)行配置,從而最終選擇是將數(shù)據(jù)直接進(jìn)行集中式存儲(chǔ),如直接存儲(chǔ)到HDFS中,還是繼續(xù)作為其他Agent的Source繼續(xù)傳輸。
在配置Sinks時(shí),需要明確的就是將要傳輸?shù)臄?shù)據(jù)目的地、結(jié)果類型;接著,根據(jù)實(shí)際需求,選擇Flume已提供支持的Flume Sinks類型;然后,再根據(jù)選擇的Sinks類型,配置必要和非必要的Sinks屬性。
3結(jié)論
在當(dāng)前大數(shù)據(jù)、社交網(wǎng)絡(luò)、云計(jì)算等技術(shù)中,如何對(duì)產(chǎn)生的大數(shù)據(jù)進(jìn)行采集是大數(shù)據(jù)處理面臨的問(wèn)題之一。Apache Flume是一個(gè)高可靠、高可用的分布式系統(tǒng),用于高效地從許多不同的數(shù)據(jù)源收集、聚合大批量的日志數(shù)據(jù),進(jìn)行集中式存儲(chǔ)。通過(guò)理解Flume的工作原理和機(jī)制,對(duì)Flume的核心組件進(jìn)行配置就可以快速搭建高效可靠的大數(shù)據(jù)日志采集系統(tǒng)。
參考文獻(xiàn):
[1] 孟小峰,慈祥.大數(shù)據(jù)管理:概念、技術(shù)與挑戰(zhàn).計(jì)算機(jī)研究與發(fā)展,2013,1.
[2] 張彥超,劉云,張海峰,程輝,熊菲.基于在線社交網(wǎng)絡(luò)的信息傳播模型.物理學(xué)報(bào),2011,5.
[3] 陳康,鄭緯民.云計(jì)算:系統(tǒng)實(shí)例與研究現(xiàn)狀.軟件學(xué)報(bào),2009,05.
[4] 趙志偉.大數(shù)據(jù)平臺(tái)實(shí)時(shí)計(jì)算監(jiān)控方案分析.自動(dòng)化與儀表,2020,04.
(武漢軟件工程職業(yè)學(xué)院 ?湖北 武漢 ? 430205)