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