基于Hadoop的大規模網絡流量分析

在網絡流量的分析中,基于流的分析被大多數ISP所采用,分析系統一般部署在一臺高配置的服務器中。如由CERT網絡勢態感知團隊(CERT-NetSA)開發的用于大規模網絡安全分析的網絡交互分析工具集 SILK(the System for Internet-Level Knowledge),支持有效的收集、存儲和分析網絡流數據,SILK可以高效地查詢歷史大流量數據集,能用于分析大的企業或者中型ISP的骨干或邊界網絡流量。然而,隨著互聯網帶寬的日益增加,單臺系統會受到硬件等因素的限制使計算速度變得很緩慢,而且數據存放在單個服務器時的風險往往也很大,需要考慮使用分布式的方法。而分布式計算平臺Hadoop以及依托在Hadoop平臺下的MapReduce框架為解決這類問題提供了良好的支撐。Hadoop 是Apache的一個子項目主要由分布式文件系HDFS計算框架和資源管理器YARN組成,其中MapReduce是當中最著名的計算框架,也是大規模分析網絡流量的基礎。

  Hadoop搭建的網絡流量分析系統比之傳統的分析手段有著以下的優點:1.更節省成本。只用少量的廉價機器就可以搭建起一個基于Hadoop的分布式計算平臺;2.更具擴展性。使用分布式計算框架,每個節點都參與運算,計算效率隨著節點數的增加線性增長;3. 更加可靠。分布式數據系統HDFS保證了備份數據的數量均勻分布在集群內部的各個節點上,數據更不易因機器的故障而丟失。本文基于Hadoop設計實現了適用于大規模網絡流量的分析系統,使用了四個節點構成的分析集群,用來和一個單點SILK的數據流分析工具進行對比,結果表明該方法在大量數據的情況下相比于傳統的流分析工具具有更好的效率、可靠性及可擴展性。

  網絡流分析

  一條流由一個源主機與一個目的主機間的單方向傳輸的網絡數據包組成,其中源和目的主機由各自的IP地址和端口號來標識。更明確的定義是,一條流由源IP地址、目的IP地址、源端口、目的端口、時間戳、服務類型、入邏輯接口標識符等關鍵字唯一標識。

  在過去的數十年間,有很多技術和工具被廣泛地應用到網絡流量的分析當中。Tcpdump是最常見的一種網絡流分析工具,Wireshark則提供了用戶友好的界面,以其簡單易用性著稱。CoralReef和Snort的相繼出現為實時分析網絡流量也做出了很大的貢獻。隨后又出現了如SILK等網絡流分析工具。這些網絡流分析工具在少量的數據下完全可以勝任網絡流分析的工作。然而隨著近幾年來數據爆炸式的增長,傳統的基于單點的網絡流量分析的方法變得越來越不能滿足需求。

  Hadoop中的MapReduce計算框架以前主要被應用于大規模的網絡文本分析、數據挖掘以及日志分析當中。在本次工作中,我們把MapReduce創新性的應用在了網絡流分析當中,這樣就可以使相應的網絡流的統計不在拘泥于一個節點上,突破了單點網絡流統計的局限性。同時使得網絡流分析具有了更高的可擴展性,每當集群遇到計算瓶頸時,我們只需加入更多的節點,就可以使計算速度提升,而不是花費大量的金錢去購買更高配置的機器。

  Hadoop網絡流量分析

  NetFlow產生大量的數據,但大多時候我們只需要這些數據的統計結果。用普通的串行方法可以在少量的數據集上進行統計,并且達到很理想的效果,但是一旦數據超過一定量級,便不能有效地進行處理,這時一些基于分布式的并行計算框架就有了用武之地。為了實現并行計算,已經有很多組織機構提出了多種方法,其中以Google提出的MapReduce框架最為著名。該框架已被廣泛應用于文本搜索,海量數據挖掘等場合。

  概述

  圖1展示了我們進行流分析時的機器拓撲結構。其中Hadoop云平臺提供了分布式文件系統HDFS和云計算功能。

  首先從各個數據源中提取數據,然后把各個數據源數據解析出來的可讀數據上傳云平臺上。云平臺的計算由一個主節點組織,若干從節點協同。主節點用來存儲元數據、分配資源和任務調度。我們可以對其進行相應的系數配置如緩沖區大小、數據分片大小、處理線程的多少等因素,以更好地達到實驗效果。從節點則接受主節點的調度,主要參與運算,同時也會定時反饋自己所在節點的狀況。每個從節點上會根據HDFS的配置有若干份,在進行分布式計算時,從節點計算時通過Hadoop自帶的RPC協議來進行通信。具體的計算過程則是由MapReduce框架完成。

  MapReduce下的Flow分析

  MapReduce計算框架下,任何數據都可以被看做是一對鍵值的組合。Map函數和Reduce函數是 Map-Reduce的兩大組成部分。Map函數用來對原始數據進行過濾,然后產生中間結果(也是鍵-值的形式)該中間結果作為Reduce函數的輸入。之后,Hadoop會把具有相同鍵的值歸為一個列表,然后再遍歷列表進行數據的統計。Reduce過后,通常中間數據集都會縮小,因為Reduce過程中僅提取了該部分的有效信息。為了能使用MapReduce框架進行不同流字段的分析,應當設計自己Map和Reduce函數,如果要做某時間段的流量檢測,那么Map函數要設計成帶有可以提取某時間段所有流量的功能。如果我們要查看是否有潛在的DDos攻擊,那么Map函數被設計成可以提取知名端口字段,其他的功能與此類似。

  圖2詳細地介紹了統計某時間段流量的MapRed-uce的工作流程。圖中有一個上文沒有提到combiner的過程,該過程主要用于再從節點進行部分歸并,以提高程序的運行效率。

  1.輸入文件

  首先,我們把提取的原始NetFlow字段利用SILK自帶的工具rwfilter解析成Hadoop可以讀出的數據字段,即文本字段。接著把這些解析出來的字段由Hadoop客戶端上傳到HDFS中,由于解析出來的文本字段遠遠大于原來的二進制形式的文件,所以需要把這部分輸入規模變小一些。SILK本身并不提供解析二進制文件的接口,所以采取了把源數據進行壓縮的方法,采取的壓縮格式最好是能支持 Hadoop的LZO,通過實驗也證明了這種壓縮方式確實有最好效率。

  2.Mapper

  Mapper首先讀入存在在HDFS中的文件作為自己的輸入,它的讀入以行為單位。然后再用文本處理工具對這些行字段進行提取,提取的字段和要進行的操作有關。以統計某時段的某IP的流入流量為例,Mapper輸入中會有IP、端口、協議、時間戳等字段。由于是進行某時間段流量的統計,我們把該時間段內的IP字段提取出來作為鍵,把該時間段內的流量提取出來作為值,這樣就構成了一個Mapper。

  3.Reducer

  Reducer把Mapper的輸出作為輸入,同樣以統計某IP地址某時間段流入流量為例。Mapper中得到了IP-Bytes鍵值對,Reducer中把相同的鍵所對應的值歸并在一個列表L中這樣,鍵值對就變成(IP,L),這樣就可以遍歷L并把所有的流量相加,就得到了我們想要的結果。

  實驗及結果對比

  為了進行實驗,我們搭建了1個主節點以及4個從節點的Hadoop-2.4.1版本的集群,集群的每個從節點帶有2.83GHz的12核CPU,內存大小為48G,硬盤大小為40TB,集群的主節點帶有一個12核2.83GHz的CPU和64G內存。為了提高效率,主從節點均在同一個機架上,連在同一個交換機上。SILK的對比試驗則是在單節點上進行,配置相同。

  可以看到當數據量不大時,SILK往往具有更快的速度,這是因為Hadoop在進行計算前,要做一些集群間的通信及初始化工作,在小數據集上并不占優勢。然而當我們把實驗數據逐漸加大時,發現Hadoop會在某個點超越SILK的分析速度,當數據集再逐漸擴大時,Hadoop的優勢變得更加明顯,如圖3所示。

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

文章轉載自公眾號 GitChat精品課

發表評論