基于Hadoop的大規(guī)模網(wǎng)絡(luò)流量分析
在網(wǎng)絡(luò)流量的分析中,基于流的分析被大多數(shù)ISP所采用,分析系統(tǒng)一般部署在一臺高配置的服務(wù)器中。如由CERT網(wǎng)絡(luò)勢態(tài)感知團(tuán)隊(duì)(CERT-NetSA)開發(fā)的用于大規(guī)模網(wǎng)絡(luò)安全分析的網(wǎng)絡(luò)交互分析工具集 SILK(the System for Internet-Level Knowledge),支持有效的收集、存儲和分析網(wǎng)絡(luò)流數(shù)據(jù),SILK可以高效地查詢歷史大流量數(shù)據(jù)集,能用于分析大的企業(yè)或者中型ISP的骨干或邊界網(wǎng)絡(luò)流量。然而,隨著互聯(lián)網(wǎng)帶寬的日益增加,單臺系統(tǒng)會受到硬件等因素的限制使計(jì)算速度變得很緩慢,而且數(shù)據(jù)存放在單個(gè)服務(wù)器時(shí)的風(fēng)險(xiǎn)往往也很大,需要考慮使用分布式的方法。而分布式計(jì)算平臺Hadoop以及依托在Hadoop平臺下的MapReduce框架為解決這類問題提供了良好的支撐。Hadoop 是Apache的一個(gè)子項(xiàng)目主要由分布式文件系HDFS計(jì)算框架和資源管理器YARN組成,其中MapReduce是當(dāng)中最著名的計(jì)算框架,也是大規(guī)模分析網(wǎng)絡(luò)流量的基礎(chǔ)。
Hadoop搭建的網(wǎng)絡(luò)流量分析系統(tǒng)比之傳統(tǒng)的分析手段有著以下的優(yōu)點(diǎn):1.更節(jié)省成本。只用少量的廉價(jià)機(jī)器就可以搭建起一個(gè)基于Hadoop的分布式計(jì)算平臺;2.更具擴(kuò)展性。使用分布式計(jì)算框架,每個(gè)節(jié)點(diǎn)都參與運(yùn)算,計(jì)算效率隨著節(jié)點(diǎn)數(shù)的增加線性增長;3. 更加可靠。分布式數(shù)據(jù)系統(tǒng)HDFS保證了備份數(shù)據(jù)的數(shù)量均勻分布在集群內(nèi)部的各個(gè)節(jié)點(diǎn)上,數(shù)據(jù)更不易因機(jī)器的故障而丟失。本文基于Hadoop設(shè)計(jì)實(shí)現(xiàn)了適用于大規(guī)模網(wǎng)絡(luò)流量的分析系統(tǒng),使用了四個(gè)節(jié)點(diǎn)構(gòu)成的分析集群,用來和一個(gè)單點(diǎn)SILK的數(shù)據(jù)流分析工具進(jìn)行對比,結(jié)果表明該方法在大量數(shù)據(jù)的情況下相比于傳統(tǒng)的流分析工具具有更好的效率、可靠性及可擴(kuò)展性。
網(wǎng)絡(luò)流分析
一條流由一個(gè)源主機(jī)與一個(gè)目的主機(jī)間的單方向傳輸?shù)木W(wǎng)絡(luò)數(shù)據(jù)包組成,其中源和目的主機(jī)由各自的IP地址和端口號來標(biāo)識。更明確的定義是,一條流由源IP地址、目的IP地址、源端口、目的端口、時(shí)間戳、服務(wù)類型、入邏輯接口標(biāo)識符等關(guān)鍵字唯一標(biāo)識。
在過去的數(shù)十年間,有很多技術(shù)和工具被廣泛地應(yīng)用到網(wǎng)絡(luò)流量的分析當(dāng)中。Tcpdump是最常見的一種網(wǎng)絡(luò)流分析工具,Wireshark則提供了用戶友好的界面,以其簡單易用性著稱。CoralReef和Snort的相繼出現(xiàn)為實(shí)時(shí)分析網(wǎng)絡(luò)流量也做出了很大的貢獻(xiàn)。隨后又出現(xiàn)了如SILK等網(wǎng)絡(luò)流分析工具。這些網(wǎng)絡(luò)流分析工具在少量的數(shù)據(jù)下完全可以勝任網(wǎng)絡(luò)流分析的工作。然而隨著近幾年來數(shù)據(jù)爆炸式的增長,傳統(tǒng)的基于單點(diǎn)的網(wǎng)絡(luò)流量分析的方法變得越來越不能滿足需求。
Hadoop中的MapReduce計(jì)算框架以前主要被應(yīng)用于大規(guī)模的網(wǎng)絡(luò)文本分析、數(shù)據(jù)挖掘以及日志分析當(dāng)中。在本次工作中,我們把MapReduce創(chuàng)新性的應(yīng)用在了網(wǎng)絡(luò)流分析當(dāng)中,這樣就可以使相應(yīng)的網(wǎng)絡(luò)流的統(tǒng)計(jì)不在拘泥于一個(gè)節(jié)點(diǎn)上,突破了單點(diǎn)網(wǎng)絡(luò)流統(tǒng)計(jì)的局限性。同時(shí)使得網(wǎng)絡(luò)流分析具有了更高的可擴(kuò)展性,每當(dāng)集群遇到計(jì)算瓶頸時(shí),我們只需加入更多的節(jié)點(diǎn),就可以使計(jì)算速度提升,而不是花費(fèi)大量的金錢去購買更高配置的機(jī)器。
Hadoop網(wǎng)絡(luò)流量分析
NetFlow產(chǎn)生大量的數(shù)據(jù),但大多時(shí)候我們只需要這些數(shù)據(jù)的統(tǒng)計(jì)結(jié)果。用普通的串行方法可以在少量的數(shù)據(jù)集上進(jìn)行統(tǒng)計(jì),并且達(dá)到很理想的效果,但是一旦數(shù)據(jù)超過一定量級,便不能有效地進(jìn)行處理,這時(shí)一些基于分布式的并行計(jì)算框架就有了用武之地。為了實(shí)現(xiàn)并行計(jì)算,已經(jīng)有很多組織機(jī)構(gòu)提出了多種方法,其中以Google提出的MapReduce框架最為著名。該框架已被廣泛應(yīng)用于文本搜索,海量數(shù)據(jù)挖掘等場合。
概述
圖1展示了我們進(jìn)行流分析時(shí)的機(jī)器拓?fù)浣Y(jié)構(gòu)。其中Hadoop云平臺提供了分布式文件系統(tǒng)HDFS和云計(jì)算功能。

首先從各個(gè)數(shù)據(jù)源中提取數(shù)據(jù),然后把各個(gè)數(shù)據(jù)源數(shù)據(jù)解析出來的可讀數(shù)據(jù)上傳云平臺上。云平臺的計(jì)算由一個(gè)主節(jié)點(diǎn)組織,若干從節(jié)點(diǎn)協(xié)同。主節(jié)點(diǎn)用來存儲元數(shù)據(jù)、分配資源和任務(wù)調(diào)度。我們可以對其進(jìn)行相應(yīng)的系數(shù)配置如緩沖區(qū)大小、數(shù)據(jù)分片大小、處理線程的多少等因素,以更好地達(dá)到實(shí)驗(yàn)效果。從節(jié)點(diǎn)則接受主節(jié)點(diǎn)的調(diào)度,主要參與運(yùn)算,同時(shí)也會定時(shí)反饋?zhàn)约核诠?jié)點(diǎn)的狀況。每個(gè)從節(jié)點(diǎn)上會根據(jù)HDFS的配置有若干份,在進(jìn)行分布式計(jì)算時(shí),從節(jié)點(diǎn)計(jì)算時(shí)通過Hadoop自帶的RPC協(xié)議來進(jìn)行通信。具體的計(jì)算過程則是由MapReduce框架完成。
#p#
MapReduce下的Flow分析
MapReduce計(jì)算框架下,任何數(shù)據(jù)都可以被看做是一對鍵值的組合。Map函數(shù)和Reduce函數(shù)是 Map-Reduce的兩大組成部分。Map函數(shù)用來對原始數(shù)據(jù)進(jìn)行過濾,然后產(chǎn)生中間結(jié)果(也是鍵-值的形式)該中間結(jié)果作為Reduce函數(shù)的輸入。之后,Hadoop會把具有相同鍵的值歸為一個(gè)列表,然后再遍歷列表進(jìn)行數(shù)據(jù)的統(tǒng)計(jì)。Reduce過后,通常中間數(shù)據(jù)集都會縮小,因?yàn)镽educe過程中僅提取了該部分的有效信息。為了能使用MapReduce框架進(jìn)行不同流字段的分析,應(yīng)當(dāng)設(shè)計(jì)自己Map和Reduce函數(shù),如果要做某時(shí)間段的流量檢測,那么Map函數(shù)要設(shè)計(jì)成帶有可以提取某時(shí)間段所有流量的功能。如果我們要查看是否有潛在的DDos攻擊,那么Map函數(shù)被設(shè)計(jì)成可以提取知名端口字段,其他的功能與此類似。
圖2詳細(xì)地介紹了統(tǒng)計(jì)某時(shí)間段流量的MapRed-uce的工作流程。圖中有一個(gè)上文沒有提到combiner的過程,該過程主要用于再從節(jié)點(diǎn)進(jìn)行部分歸并,以提高程序的運(yùn)行效率。

1.輸入文件
首先,我們把提取的原始NetFlow字段利用SILK自帶的工具rwfilter解析成Hadoop可以讀出的數(shù)據(jù)字段,即文本字段。接著把這些解析出來的字段由Hadoop客戶端上傳到HDFS中,由于解析出來的文本字段遠(yuǎn)遠(yuǎn)大于原來的二進(jìn)制形式的文件,所以需要把這部分輸入規(guī)模變小一些。SILK本身并不提供解析二進(jìn)制文件的接口,所以采取了把源數(shù)據(jù)進(jìn)行壓縮的方法,采取的壓縮格式最好是能支持 Hadoop的LZO,通過實(shí)驗(yàn)也證明了這種壓縮方式確實(shí)有最好效率。
2.Mapper
Mapper首先讀入存在在HDFS中的文件作為自己的輸入,它的讀入以行為單位。然后再用文本處理工具對這些行字段進(jìn)行提取,提取的字段和要進(jìn)行的操作有關(guān)。以統(tǒng)計(jì)某時(shí)段的某IP的流入流量為例,Mapper輸入中會有IP、端口、協(xié)議、時(shí)間戳等字段。由于是進(jìn)行某時(shí)間段流量的統(tǒng)計(jì),我們把該時(shí)間段內(nèi)的IP字段提取出來作為鍵,把該時(shí)間段內(nèi)的流量提取出來作為值,這樣就構(gòu)成了一個(gè)Mapper。
3.Reducer
Reducer把Mapper的輸出作為輸入,同樣以統(tǒng)計(jì)某IP地址某時(shí)間段流入流量為例。Mapper中得到了IP-Bytes鍵值對,Reducer中把相同的鍵所對應(yīng)的值歸并在一個(gè)列表L中這樣,鍵值對就變成(IP,L),這樣就可以遍歷L并把所有的流量相加,就得到了我們想要的結(jié)果。
實(shí)驗(yàn)及結(jié)果對比
為了進(jìn)行實(shí)驗(yàn),我們搭建了1個(gè)主節(jié)點(diǎn)以及4個(gè)從節(jié)點(diǎn)的Hadoop-2.4.1版本的集群,集群的每個(gè)從節(jié)點(diǎn)帶有2.83GHz的12核CPU,內(nèi)存大小為48G,硬盤大小為40TB,集群的主節(jié)點(diǎn)帶有一個(gè)12核2.83GHz的CPU和64G內(nèi)存。為了提高效率,主從節(jié)點(diǎn)均在同一個(gè)機(jī)架上,連在同一個(gè)交換機(jī)上。SILK的對比試驗(yàn)則是在單節(jié)點(diǎn)上進(jìn)行,配置相同。
可以看到當(dāng)數(shù)據(jù)量不大時(shí),SILK往往具有更快的速度,這是因?yàn)镠adoop在進(jìn)行計(jì)算前,要做一些集群間的通信及初始化工作,在小數(shù)據(jù)集上并不占優(yōu)勢。然而當(dāng)我們把實(shí)驗(yàn)數(shù)據(jù)逐漸加大時(shí),發(fā)現(xiàn)Hadoop會在某個(gè)點(diǎn)超越SILK的分析速度,當(dāng)數(shù)據(jù)集再逐漸擴(kuò)大時(shí),Hadoop的優(yōu)勢變得更加明顯,如圖3所示。

本文主要展示了如何利用Hadoop和MapReduce框架進(jìn)行大規(guī)模的網(wǎng)絡(luò)流的分析的方法,并列舉了幾個(gè)利用這種方法進(jìn)行實(shí)際分析的實(shí)例以及和傳統(tǒng)方法進(jìn)行網(wǎng)絡(luò)流分析的對比。實(shí)踐中,該方法在大量數(shù)據(jù)的情況下相比于傳統(tǒng)的流分析工具具有更高的效率。另外它在可靠性、可擴(kuò)展性方面也有著突出的表現(xiàn),隨著Hadoop更高版本的推出,現(xiàn)在的單點(diǎn)故障問題以及分布式系統(tǒng)安全方面也有了顯著的提升,使得該方法的應(yīng)用更成為了可能。

























