趙振中,廖 駿
(中國人民解放軍95794 部隊,廣水 432700)
大數(shù)據(jù)的處理模式主要分為流處理和批處理兩種[1],批處理是先存儲后處理,而流處理則是直接處理。面對大數(shù)據(jù)的存儲、管理和分析需求,業(yè)界通常做法是使用分布式計算平臺來解決。Hadoop 是一種開源分布式計算平臺,它采用分布式存儲方式,數(shù)據(jù)讀寫速度得以提升,并且存儲容量得到擴(kuò)充。采用MapReduce 整合重組分布式文件系統(tǒng)上的數(shù)據(jù),提高了分析和處理數(shù)據(jù)的效率,同時采用存儲冗余數(shù)據(jù)的方式確保了數(shù)據(jù)的安全性[2]。
監(jiān)控系統(tǒng)的數(shù)據(jù)包括各系統(tǒng)參數(shù)、視頻數(shù)據(jù)、圖像數(shù)據(jù)、文本數(shù)據(jù)等,僅用傳統(tǒng)的關(guān)系型數(shù)據(jù)庫(sqlserver 或者oracle)和常規(guī)的文件系統(tǒng)來存儲、管理這些數(shù)據(jù)已不能滿足需求,需要使用非關(guān)系型數(shù)據(jù)庫(NoSQL)來存儲文本數(shù)據(jù),使用分布式文件系統(tǒng)(HDFS)來存儲視頻數(shù)據(jù)和圖像數(shù)據(jù),并使用一種并行化計算框架(MapReduce)來整合各種數(shù)據(jù)。
Hadoop 作為一種分布式計算平臺,用戶容易輕松搭建和使用,可以開發(fā)和運行處理海量數(shù)據(jù)的應(yīng)用程序,具有以下幾個優(yōu)點:
(1)高可靠性,數(shù)據(jù)采用按位存儲方式,并且具有多個備份,處理結(jié)果較為可靠。
(2)高擴(kuò)展性,數(shù)據(jù)分派和計算工作在計算機(jī)集群中實現(xiàn),容易拓展添加新的節(jié)點,完成集群的擴(kuò)大。
(3)高效率性,數(shù)據(jù)可以在節(jié)點間動態(tài)移動并保持平衡,數(shù)據(jù)的并發(fā)處理提高了處理速度。
(4)高容錯性,文件存儲、讀取出錯時,系統(tǒng)會調(diào)用其他節(jié)點上的備份文件確保程序正常運行;對于失敗任務(wù),系統(tǒng)能夠自動重啟或者重新分配。
目前,Hadoop 已經(jīng)發(fā)展成為包含多個子項目的集合,最核心的兩個部分是HDFS(分布式文件系統(tǒng))和MapReduce(并行計算框架)。

圖1 分布式文件系統(tǒng)web管理界面
HDFS 具有主/從架構(gòu),一個HDFS 集群包含單個NameNode(主服務(wù)器)和若干個DataNode,其中NameNode 負(fù)責(zé)管理文件系統(tǒng)命名空間并調(diào)整客戶端對文件的訪問權(quán)限,維護(hù)系統(tǒng)元數(shù)據(jù);集群的DataNode 負(fù)責(zé)管理存儲的實際數(shù)據(jù),根據(jù)客戶端的請求執(zhí)行讀寫操作,遵照NameNode 的指令進(jìn)行數(shù)據(jù)塊的創(chuàng)建、刪除和復(fù)制。
2.2.1 文件寫入
(1)Client(客戶端)向NameNode 發(fā)出寫文件請求,NameNode 檢查目標(biāo)文件的權(quán)限、路徑并作出響應(yīng),若通過檢查,則返回輸出流對象。
(2)Client 將文件切分為若干個Block,按照分配的DataNode 地址信息,依次寫入每個DataNode 塊中,DataNode 寫完后會返回確認(rèn)信息。
(3)關(guān)閉輸出流,Client 向NameNode 反饋數(shù)據(jù)傳輸完成信號。
2.2.2 文件讀取
(1)Client 訪問NameNode 發(fā)起讀文件請求,NameNode 查詢目標(biāo)文件的元數(shù)據(jù)(包括文件存儲的DataNode 信息),返回輸入流對象。
(2)Client 接收到信息后,與對應(yīng)的DataNode 連接,開始讀取數(shù)據(jù)。
(3)結(jié)束讀操作,關(guān)閉輸入流。
2.2.3 文件塊復(fù)制
當(dāng)部分文件Block 不符合最小復(fù)制數(shù)要求或者部分DataNode失效時,NameNode 會指令DataNode 互相復(fù)制Block。
體系結(jié)構(gòu)如圖2所示:

圖2 分布式文件系統(tǒng)體系結(jié)構(gòu)圖
MapReduce 是一種易于編程,并以可靠、容錯的方式快速地并行處理大量數(shù)據(jù)集的軟件框架,由一個單獨運行在主節(jié)點上的JobTracker 和運行在每個集群從節(jié)點上的TaskTracker 共同組成。主節(jié)點負(fù)責(zé)作業(yè)的調(diào)度和資源的管理,將作業(yè)拆分為任務(wù)分發(fā)給從節(jié)點,跟蹤監(jiān)控其執(zhí)行情況,發(fā)現(xiàn)任務(wù)故障或失敗即重新運行;從節(jié)點負(fù)責(zé)接收并執(zhí)行主節(jié)點指派的任務(wù)。
MapReduce 通過Map 和Reduce 函數(shù)來實現(xiàn):自定義的Map函數(shù)接收一個<key,value>形式的輸入,產(chǎn)生一個<key,value>形式的中間輸出,集合所有具有相同key 值的value 全部傳遞給Reduce 函數(shù);Reduce 函數(shù)接收key 和相關(guān)value 集合的輸入進(jìn)行合并處理,產(chǎn)生0或1個<key,value>形式的輸出[3]。

圖3 MapReduce工作的簡易圖

圖4 MapReduce運行時web端的任務(wù)管理器
在單機(jī)上搭建一個由兩臺虛擬機(jī)組成的Hadoop 集群,環(huán)境配置如下:

表1 Hadoop集群節(jié)點配置表
程序集成開發(fā)環(huán)境使用Eclipse+Hadoop Eclipse plugin,程序開發(fā)語言使用java,Hadoop 開源版本號為0.18.0,數(shù)據(jù)庫采用oracle。

圖5 兩臺虛擬機(jī)組成的Hadoop集群

圖6 程序集成開發(fā)環(huán)境

圖7 Hadoop分布式文件系統(tǒng)
3.2.1 問題描述
在監(jiān)控系統(tǒng)軟件開發(fā)過程中使用數(shù)據(jù)庫時,多數(shù)情況會將兩張甚至多張表關(guān)聯(lián)起來使用。如查詢最新的理論位移參數(shù)時,需要結(jié)合理論位移參數(shù)配置表和理論位移實時參數(shù)表來查詢。具體如下:

表2 理論位移參數(shù)配置表

表3 理論位移實時參數(shù)表
第一張表將參數(shù)編號(PARANO 字段)和參數(shù)名稱(PARANAME 字段)映射起來,第二張表將參數(shù)編號(PARANO字段)和參數(shù)值(PARA 字段)映射起來,而在監(jiān)控系統(tǒng)軟件中需要將參數(shù)名稱和參數(shù)值映射起來,因此需要用到多表關(guān)聯(lián)。
當(dāng)系統(tǒng)中需要做關(guān)聯(lián)的表越來越多,并且每張表中的數(shù)據(jù)越來越多時,多表關(guān)聯(lián)操作就會變得很復(fù)雜,需要在分布式計算平臺上利用并行算法來實現(xiàn)。
3.2.2 算例描述
本例選擇監(jiān)控系統(tǒng)數(shù)據(jù)庫中所有數(shù)值型參數(shù)配置表和參數(shù)數(shù)據(jù)表作為計算對象,設(shè)計MapReduce 算法做多表關(guān)聯(lián)。
輸入:數(shù)據(jù)庫中所有配置表和數(shù)據(jù)表。
輸出:將所有參數(shù)名稱(PARANAME 字段)和參數(shù)值(PARA字段)映射起來,輸出到文本文件中。
3.2.3 算法描述
(1)對輸入進(jìn)行預(yù)處理,提取出其中影響輸出的部分,形式如下:
配置表PARANO -> PARANAME參數(shù)表PARANO -> PARA
則輸出形式如下:
PARANAME -> PARA
(2)Map 函數(shù)對輸入的行進(jìn)行分辨,確定其表的歸屬,接著對其進(jìn)行拆分,在key 中存放連接的列值,對應(yīng)地在value 中存放配置表、參數(shù)表標(biāo)志和另一列,然后輸出。
(3)Reduce 函數(shù)接收連接數(shù)據(jù)后,解析并處理value 內(nèi)容,按照標(biāo)志分開保存配置表和參數(shù)表內(nèi)容,求出笛卡爾積,然后輸出。
3.2.4 結(jié)果
本例共使用100 張數(shù)據(jù)表,在Hadoop 集群上運行MapReduce 算法,輸出結(jié)果截圖如圖8所示:

圖8 Hadoop系統(tǒng)啟動

圖9 MapReduce程序運行圖

圖10 并行化多表關(guān)聯(lián)的結(jié)果
多表關(guān)聯(lián)是并行化算法在監(jiān)控系統(tǒng)大數(shù)據(jù)背景下的一個應(yīng)用。大數(shù)據(jù)排序、大數(shù)據(jù)指標(biāo)統(tǒng)計、大數(shù)據(jù)結(jié)果快速評估、通過數(shù)據(jù)挖掘方法進(jìn)行故障診斷等都是大數(shù)據(jù)的應(yīng)用。Hadoop 中Pig子項目對大型數(shù)據(jù)集展開分析和評估工作,基礎(chǔ)結(jié)構(gòu)上的優(yōu)勢確保其能夠順利通過并行化的高度檢測;Mahout 子項目提供了經(jīng)典的機(jī)器學(xué)習(xí)算法,包括聚類、分類、協(xié)同過濾和頻繁項集的挖掘[2]。
本文結(jié)合實際,利用實驗用分布式計算環(huán)境,對監(jiān)控系統(tǒng)中大數(shù)據(jù)應(yīng)用進(jìn)行簡單研究。隨著大數(shù)據(jù)時代的到來,學(xué)術(shù)界對其研究仍處于初步階段,[1]中介紹了大數(shù)據(jù)研究面臨的新挑戰(zhàn),還有很多基礎(chǔ)性問題有待解決。