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

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

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

圖3 MapReduce工作的簡易圖

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

表1 Hadoop集群節點配置表
程序集成開發環境使用Eclipse+Hadoop Eclipse plugin,程序開發語言使用java,Hadoop 開源版本號為0.18.0,數據庫采用oracle。

圖5 兩臺虛擬機組成的Hadoop集群

圖6 程序集成開發環境

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

表2 理論位移參數配置表

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

圖8 Hadoop系統啟動

圖9 MapReduce程序運行圖

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