常偉鵬,袁 泉
(中國藥科大學圖書與信息中心,江蘇 南京 211198)
網絡流量急劇增加,導致網絡系統的處理能力遠低于網絡數據的存儲與傳輸要求[1,2]。然而隨著網絡規模的增加,分布式集群中[3]存在一些異常行為的節點,這些異常節點很有可能降低系統的運行效率,甚至導致系統運行崩潰[4,5]。為了應對網絡安全問題,對異常節點進行檢測與處理,降低異常節點造成的損失,成為保護網絡安全的重要研究課題之一。
文獻[6]通過Logstash工具對Hadoop集群點中的任務狀態信息進行收集,結合Perf性能工具對收集信息的異常點進行分析,采用異常點診斷算法對集群中異常點進行診斷,構建出異常點實時監測模型,該方法對異常點監測的精度較高,但不適用于較復雜的場景。文獻[7]通過Flume采集組件結合Spark集群框架對數據進行采集,并計算出采集數據的節點風險值,利用路由器節點數量對節點狀況進行判斷,通過定位算法完成對異常節點的定位,該方法誤報率較低,但目前僅處于實驗測試階段。文獻[8]在模型中引入圖結構、圖動態變化和圖屬性信息,對網絡異常節點進行向量表示,并提出動態網絡無監督算法對提取的異常特征進行向量學習,該方法不僅能夠提升異常點的檢測精度,還能夠挖掘出網絡中有實際意義的異常點,但系統的運行效率有待提高。
基于以上研究,提出基于Hadoop的動態網絡異常節點智能檢測方法。詳細分析了Hadoop網絡行為監測系統,對網絡節點流量進行分析。針對初始聚類敏感問題,提出一種改進的均衡化評價函數對簇內節點差異準確的分析。
Hadoop是一種分布式計算框架,其核心包含HDFS和Map/Reduce兩部分內容。Hadoop作為分布式軟件框架具有可靠性高、擴展性高、效率性高、容錯性高和成本低等5個突出性的優點。伴隨著發展,Hadoop已經逐漸成為由數據分析層、編輯模型層、數據存儲層、數據集成層和平臺管理層組成的生態體系,每個層次間具有相應的功能,通過相互合作完成數據的存儲與計算。Hadoop體系結構如圖1所示。

圖1 Hadoop體系結構圖
平臺管理層對維持系統的穩定秩序起到決定性的作用,主要負責節點的故障分析、管理和性能優化等工作。數據集成層主要是將網絡數據導入到HDFS上,對數據進行整理與統計。存儲層主要是將導入到HDFS上的數據以64MB大小分塊的形式分布式存儲起來。模型層主要負責Map和Reduce的編程任務,是服務器分析數據的核心層次。數據分析層與用戶直接關聯,可通過特定的分析與建模等完成用戶的特定需求。
HDFS采用Master/Slave架構,主要負責Hadoop集群數據的管理與存儲,按照64MB大小將數據按分塊的形式進行存儲,可以進行多次的讀寫操作。
MapReduce為分布式編程框架,主要負責提供給用戶簡單接口,即使在用戶不了解分布式程序的情況下,通過規則編寫map和reduce函數就可以實現將程序運行到分布式集群上。由分治規則,MapReduce具有把單一節點上難以解決的問題劃分成眾多小問題處理的能力,可以極大程度地提高工作效率,減少對寬帶的損耗。
NetBASS是一種實現網絡檢測、分析與處理的架構,主要功能是通過對網絡流量數據的分析,對主機和網絡節點的正常或異常行為以及惡意流量進行查找。
網絡節點是一種由協議、IP地址和目的端口組成的實體,每個節點代表一種網絡業務。在一天中,少數節點產生的流量能占據網絡節點的大部分,而大部分節點產生的流量反而占據網絡節點小部分的特征,與冪律分布較為吻合。Zipf分布能夠從大到小的對統計數據進行排序,是從冪律分布中演化來的。網絡節點總流量服從Zipf排名分布,定義PDF為p(x)=Ax-α,網絡節點排名公式可表示為

(1)
其中,y表示排名小于x的網絡節點。若網絡節點的總數為Bnum個,預測節點數大于Bnum的概率用公式可表示為
Ppre=BnumAyα-1
(2)
1)與(2)式結合,計算得出

(3)
其中,β表示排名指數,一般情況下滿足1≤β≤2。隨著排名的增加,網絡總流量呈現下降趨勢。為了對網絡節點的穩定性和離異程度進行描述,通過標準差系數對節點參數的穩定性進行評價。標準差系數是反映參數變化程度的相對指標,公式可表示為

(4)

K-means算法是一種經典的劃分算法,通過K-means算法對網絡數據集聚類處理。K-means算法依據輸入的參數N,將網絡數據劃分成N個簇,并以N為參考點對相似度進行計算,經過不斷的迭代更新,直到算法收斂為止。就網絡節點檢測而言,雖然K-means算法高效快速,但在初始簇中心的選擇上具有缺陷性,其聚類結果會隨著隨機選取的初始聚類中心發生變化,極其不穩定。而且K-means算法中只對簇內的差距進行考慮,并沒有對簇間的差距加以分析,導致聚類誤差較大。因此本文對K-means算法的初始簇的選擇過程與評價函數進行改進,使用新的均衡化函數作為數據的收斂函數,使聚類效果更加穩定。引入簇內與簇間的差異,簇內差異表示同一簇間的數據緊湊情況,公式可表示為

(5)


(6)


(7)
本文以簇內/簇間差異平方和的二次開方作為均衡化函數,與使用單一的簇內或簇間均方差相比,對收斂的考慮更加全面,更有利于樣本的聚類。
網絡異常節點檢測主要由Hadoop集群異常點檢測和異常定位兩部分組成。診斷系統通過對Hadoop的運行日志進行實時檢測,并將檢測到的數據發送給指定的topic,同時各個節點把收集到的結構層數據也發送給指定的topic,進行邏輯的計算工作。異常檢測系統框架如圖2所示。

圖2 異常檢測系統框架圖
異常檢測系統由監控維度定義、數據收集和數據分析三個模塊組成。監控維度定義模塊主要起到分析系統層和體系指標層數據的作用,只需修改該模塊的信息即可監控新的性能指標。數據收集模塊主要采集集群點的性能指標,為了保證不同階段采集的性能數據,該模塊需要實時對執行階段進行監控。數據分析模塊主要對收集的性能指標進行分析,并定位出異常的節點,通過對多維度性能信息的利用,大大提高檢測精度。
Hadoop的作業由Map和Reduce兩個階段構成,在日志中不同的任務對應不同的標記,當作業提交時,通過shuffle階段對不同的任務進行交換處理,并將信息記錄到日志上。網絡節點中的各個任務均由兩條信息對其狀態進行記錄,通過記錄信息確定該任務的執行情況。網絡節點的體系結構信息反映節點的資源分配狀況,通過整合運算可確定相應節點的利用率。若某一個指標有問題,那么相應的節點就會異常。為了方便對異常節點進行定位并分析出其異常的原因,采用該節點體系結構,檢測出異常指標的方法。體系結構層數據主要分為CPU、內存和磁盤讀寫。其中CPU的性能和內存均可通過利用率進行測量,磁盤讀寫主要功能是進行數據的加載與存儲,若該性能出現問題,會嚴重影響集群的性能。本文只對后期相關的數據進行收集與分析,利用perf對節點的性能指標進行周期性的計算,通過logstash對日志采取結構化分析,然后整理成對應格式的數據發送給指定話題,提供給spark streaming做后續分析。
隨著Hadoop集群的擴大,其節點性能具有異構性,但在運行過程中節點間都是同構的,所有任務的邏輯和處理情況大致相同,正常節點行為也具有相似性,而異常行為的節點與正常節點不同于任務量上。一般情況下,異常節點的任務量較少,單個任務執行的時間相對較長。因此提出一種異常節點的檢測算法,通過對作業中的節點表現情況分析,對異常節點在集群中的位置進行檢測,結合性能指標分析出該節點異常的原因。
Hadoop集群作業的日志分解主要過程為:首先定義收集分析維度,本文主要包含節點完成map的個數,節點最近完成map的時間以及節點運行reduce的時間三方面;然后通過分析Hadoop集群作業日志獲取正在做任務的節點信息;最后按照定義的維度進行節點信息的匯總。Hadoop執行任務時map和reduce兩個階段不是完全分開的,當map任務完成后,reduce任務才開始,且會占據一個任務槽。
為降低耦合性,采用將map與reduce任務一起考慮的方法,根據集群作業中任務執行時間,將reduce任務轉換成同性能下的map任務。當作業數量較大時,未被分配reduce任務節點高于正在工作的reduce任務節點。為了避免錯誤,將邏輯完成數與節點平均值比較,若邏輯完成數大于平均值,那么節點是正常節點;若邏輯完成數小于平均值,那么節點是異常節點。采用t分布下的標準分數對節點的性能偏移進行衡量,用公式表示為

(8)
其中,μ表示邏輯完成數的均值;σ表示標準差;Vthe表示閾值。數值越大表示偏移較多。
為了驗證基于Hadoop網絡異常節點檢測方法的有效性,在Hadoop集群中使用5個運行節點,包含一個負責邏輯調度的主節點Nmain,四個負責邏輯計算的從節點N1from、N2from、N3from、N4from,每個節點配置邏輯CPU24個,內存32GB,硬盤1TB。選擇CPU hog故障進行實驗評估,在運行負載前和運行負載過程中對集群的某一個節點引入故障,判斷其異常檢測的準確性。
運行負載工作前,對第4個節點引入CPU hog故障,然后提交負載,通過測試,運行負載前引入故障的邏輯完成數與t分布下的標準分數如圖3所示。

圖3 運行負載前引入CPU hog圖
從圖中可以看出,各個節點的邏輯完成數分別為(N1from,12)、(N2from,11)、(N3from,11)、(N4from,2),t分布下的標準分數分別為(N1from,0.67)、(N2from,0.40)、(N3from,0.40)、(N4from,1.87),計算節點N4from的標準分數高于t分布的閾值1.85,而其它計算節點均比閾值低,因此除了計算節點N4from存在異常外,其它計算節點沒有報警生成,實驗結果與引入故障的節點具有一致性,驗證了本文方法的有效性。
為了對運行負載引入故障時CPU的利用率進行檢測,同樣在計算節點N4from引入CPU hog故障,通過測試,運行負載前引入故障的CPU利用率如圖4所示。

圖4 運行負載前引入故障CPU利用率
從圖中可以看出,4個節點的利用率比所有節點數的80%大時,節點應排在第一位,利用率比所有節點數的20%小時,節點應排在第五。由于N4from節點的CPU利用率排名第一,內存利用率排名第二,I/O利用率排名第四,說明N4from節點的CPU利用率比所有節點數的80%大,于是可以判斷出該節點CPU存在異常,驗證了本文方法對異常點判斷的準確性。
運行負載時,同樣對N4from節點引入CPU hog故障,但需要通過不同的時間段進行故障的引入,本文分別在map完成任務的10%、50%和90%時逐一引入的。Hadoop集群運行負載時CPU hog故障引入后運行的準確率如表1所示。

表1 引入CPU hog故障測試結果
從表中可以看出,Hadoop集群運行負載時,map任務完成10%和50%時引入CPU hog故障,準確率均能達到95%,召回率為1;雖然map任務完成90%時準確率為89%,召回率為0.87左右,但完全滿足異常點檢測要求。
為了降低運維成本,對網絡中異常節點性能問題進行及時的定位與檢測,提出一種基于Hadoop的動態網絡異常節點智能檢測方法。從Hadoop日志中獲取相關任務狀態信息,對map和reduce任務個數加以綜合考慮,通過統計學分析節點的異常情況,一旦出現網絡異常節點,通過收集系統及性能指標對異常點進行定位。在Hadoop集群中使用5個運行節點,對計算節點中的第4個節點分別在運行負載前和運行負載時引入CPU hog故障。實驗結果表明,只有引入故障的節點才會有報警生成,其余節點均為正常節點。并且當map任務完成10%和50%時,準確率均能達到95%,召回率均為1,充分證明本文方法的有效性和準確性。