朱逸峰,蘇貞,葉樹霞
(江蘇科技大學電子信息學院,江蘇 鎮江 212003)
疏浚裝備越來越發展成為大國角力,是提升遠海島礁建設、海洋維權、港口航道、填海造陸和海洋工程建設能力的國之重器,更是貫徹落實國家“交通強國”、“海洋強國戰略”和“一帶一路”倡議的重要保障[1]。疏浚裝備的升級使得挖泥船疏浚作業數據呈現爆炸式地增長,存儲在計算機內的疏浚數據量日益龐大。來自船載服務器與岸端船舶管理平臺中存儲的海量歷史數據,數據量可達數TB,甚至PB,如何高效存儲、提取和處理這些寶貴的疏浚數據成為了疏浚大數據分析亟待解決的問題,目前對于船舶大數據的應用分析還在探索階段,海量施工數據沒有得到有效的分析和利用。我國作為疏浚大國,急需在疏浚大數據分析方面取得進展,為安全、高效和智能的疏浚提供支持,通過搭建大數據平臺實現疏浚作業在線分析與決策,可有效解決因作業環境復雜和操耙手經驗不足導致的疏浚效率不高等問題。
疏浚行業飛速發展,挖泥船數據采集技術日益先進,使得挖泥船疏浚作業數據呈現爆炸式地增長。疏浚船舶上搭載的DTPM模塊、SCADA監測模塊、AMS報警模塊、AIS識別模塊和電子海圖模塊,在每日挖泥船施工時所采集的數據量非常之大,類型非常之多;這些挖泥船所采集的數據存儲在挖泥船的船載服務器及各個航道局的服務器之中,這些服務器大多數仍使用傳統的關系型數據庫對數據進行存儲[2]。面對海量的疏浚數據,傳統的關系型數據庫對于如何存儲并處理疏浚大數據越來越力不從心;各個航道局的疏浚船舶相對的獨立運行,使得海量的疏浚信息是相對封閉的,難以進行共享交換,無法整合所有采集到的數據并從中快速挖掘出疏浚規律。
針對上述的疏浚船舶數據現狀,疏浚船舶大數據平臺建設需要滿足各個航道局存儲并分析處理海量結構化疏浚數據的需求,同時遵循安全高效、高拓展性、低冗余性的原則,并且建立將各個航道局的疏浚數據進行更新與共享機制。
隨著大數據技術的不斷發展,基于Hadoop分布式框架平臺的海量數據處理技術為解決疏浚船舶大數據處理提供了思路和方法[3]。Hadoop作為大規模分布式數據處理最廣泛使用的平臺,對于結構化、半結構化和非結構化數據都提供了一套安全高效的解決方案[4]。如何借助大數據技術幫助疏浚行業從海量疏浚數據中挖掘出隱藏價值,是該文需要解決的問題。
基于對大批量疏浚數據統計和分析處理的考慮,挖泥船大數據平臺有如下3個模塊,分別為疏浚數據采集模塊、疏浚數據存儲模塊和疏浚數據分析模塊;其中疏浚數據采集模塊用于對疏浚數據進行采集與加工;疏浚數據存儲模塊用于對疏浚數據進行存儲與處理;疏浚數據分析模塊用于對疏浚數據進行分析計算。疏浚數據分析模塊分析處理過的數據系統會將其推送給不同的用戶終端,并將這些信息進行匯總、整理,實現業務應用層面的數據共享,并提供共享的數據接口服務,從而實現疏浚數據的共享與服務。挖泥船大數據平臺架構如圖1所示。

圖1 挖泥船大數據平臺架構圖
挖泥船大數據平臺數據采集模塊的任務是對挖泥船施工作業、航行等時刻的數據進行采集,由兩個子模塊組成:挖泥船端數據采集模塊與異源數據庫采集模塊;挖泥船端數據采集模塊主要是船載服務器;異源數據庫采集模塊則負責采集各個航道局、船舶企業及相關單位服務器中的數據,進行實時或者定期的數據同步與交換。
在挖泥船進行施工過程和航行過程中,數據采集系統會實時進行數據采集。傳感器信號通過以太網絡將數據發送到船載服務器;船載服務器一方面在本地經分析處理后存儲到本地數據庫[5],另一方面經過篩選壓縮處理后的有效數據通過4G或衛星通訊與云端服務器通訊連接,實時地將數據發送至云端服務器[6]。
對于來源于分布在各地、各單位的異源數據庫中的海量數據,需要進行實時或者定期的數據同步與交換,然而這些異源數據庫任然是傳統的關系型數據庫RDBMS,需要用專門的數據接口進行數據接入[7]。基于對上述原因的考慮,挖泥船大數據平臺數據采集模塊集成了Sqoop、Flume等數據接入工具對多源異構數據進行接入。Sqoop與Flume是基于Hadoop生態圈的數據接入工具,專門用于傳統數據庫和Hadoop之間傳輸數據,通過數據庫技術描述數據架構,從而在關系數據庫、數據倉庫和Hadoop之間轉移數據[8]。
數據采集模塊設置有中間數據庫,在將海量數據從異源數據庫中接入之后,中間數據庫起到將所有數據從傳統數據庫導入到疏浚數據存儲模塊的過渡作用[9];疏浚數據采集模塊將分布的、異構數源中的數據抽取到臨時中間層后進行清洗、轉換、集成,最后加載到疏浚數據存儲模塊[10]。
疏浚數據存儲模塊對采集到的船舶自身信息、設備狀態信息、環境信息、工程管理信息等進行存儲處理。疏浚數據存儲模塊具有高擴展性的分布式存儲結構,存儲模塊以Hadoop分布式系統HDFS為底層存儲,是具有分布式可擴展、高容錯、高吞吐量的體系結構,提供層次化的存儲和計算服務[11],可提高大數據管理平臺的可擴展性和可靠性。此外,疏浚數據存儲模塊集成了分布式數據庫Hbase和數據倉庫Hive,具備了海量非結構化數據存儲能力和結構化數據挖掘能力[6]。疏浚數據存儲模塊使用mysql存儲用戶信息;利用高度容錯性能并且能提供高吞吐量的數據訪問,非常適合大規模數據集上的HDFS文件系統存儲文件;使用高可靠性、高性能、面向列、可伸縮的分布式數據庫HBase對不同數據類型的異構數據進行加載存儲[12],并用一種<key,value>形式處理不同數據,并且高效解決數據后臺處理需求,同時集成分布式應用程序協調服務Zookeeper為HBase提供了穩定服務和失效轉移機制。
疏浚大數據在經過初步的ETL之后存儲到存儲模塊,此時分析模塊將對海量數據進行分析計算與數據挖掘。基于對大批量數據統計和分析的考慮,選用建立在Hadoop生態圈上的Hive進行離線分析[13]。分析任務大致有性能指標計算、分區計算、標準化計算和工藝點提取等;經過HIVE分析處理后提取出來的工藝點選用建立在Hadoop生態圈上的Mahout進行數據挖掘,并基于KMeans算法進行疏浚評估分析工作。
Hive作為數據倉庫的同時,也提供了對于海量數據進行統計分析的技術。Hive的核心機制是HQL語言,其原理類似于SQL語言,并將這些語言轉化為MapReduce程序,從而在分布式計算機集群上進行執行。因此,Hive十分適合對于海量數據集進行統計計算。基于Hive的挖泥船大數據離線分析的步驟為:1)分區處理;2)產量指標計算;3)工藝點提取;4)標準化計算。
5.1.1 數據分區處理
挖泥船在進行疏浚作業的過程中,有兩個最重要的階段:裝艙階段和溢流階段[14]。這兩個階段的施工工藝不同,性能指標不同,因而需要進行分區處理,即分為裝艙區數據和溢流區數據。然而從挖泥船端采集來的數據是連續的,即挖泥船從開始挖泥到拋泥結束的全階段數據,需要對存儲在平臺中的全階段數據進行分區計算,并將數據分區之后再進行下一步分析。
Hive提供了允許用戶擴展HQL的強大功能,即用戶自定義函數(UDF)。用戶通過JAVA編寫用戶自定義函數,從而滿足自身的需求。一旦將UDF加入到Hive的交互式界面,就可以和使用內置函數一樣地使用用戶自定義函數。針對上述的分區需求,通過編寫用戶自定義函數來判斷溢流筒的位置,當滿足溢流的條件時即判斷疏浚過程進行到了溢流階段并將數據放入到溢流分區。Hive的分區表通過指定partition字段進行分區,在創建表的時候就創建了兩個分區,即裝艙區和溢流區。經過分區處理的數據以一種符合邏輯的方式進行組織,并且也提高了查詢的性能,從而為進一步分析及后面的數據挖掘做好了準備。
5.1.2 產量指標計算
經過分區處理后的數據需要進行產量指標計算,用于后面基于Mahout的數據挖掘的聚類得到的簇評價分析、質量評估等。產量指標為干土噸生產率、泥沙存儲率、干土噸質量比[15]。
根據上述的產量指標,通過JAVA編寫對應的用戶自定義函數,計算得到的指標值作為新列存儲在原表中。
5.1.3 工藝點提取
依據疏浚作業判定,以分鐘為單位從分區表提取以下工藝點信息:船速、泥泵轉速、泥泵吸入真空、溢流筒高度和耙頭對地角度。通過HQL的Select查詢語句從分區表中獲取工藝點信息的字段并創建一張新表用于存儲工藝點。提取出的工藝點與原表中的數據分開存儲,從而提高后續基于Mahout數據挖掘時查詢與計算的效率。
5.1.4 歸一化處理
提取出來的工藝點在進行數據挖掘之前需要進行歸一化處理,從而消除工藝點信息之間的量綱影響,并解決數據指標之間的可比性。原始工藝點數據經過數據標準化處理后,各指標處于同一數量級,適合進行綜合對比評價[16]。以提取出的左泥泵壓力(bar)、左泥泵真空(bar)、左泥泵轉速(rpm)、左波浪補償器壓力(bar)、左耙頭對地角度(°)、右泥泵壓力(bar)、右泥泵真空(bar)、右泥泵轉速(rpm)、右波浪補償器壓力(bar)、右耙頭對地角度(°)為10個分析維度,使用Z分數法進行歸一化處理,處理后的數據格式如圖2所示。

圖2 歸一化后的數據格式
Mahout是建立在Apache的Hadoop分布式計算上的一個分布式數據挖掘框架,它旨在當所處理的數據規模遠大于傳統數據分析軟件所能夠承受時,作為一種可選的機器學習工具。通過Mahout,可以實現許多數據挖掘領域的機器學習算法,如協同過濾、聚類和分類等,并且將其應用在處理大數據的分布式集群之上。
5.2.1 Mahout的K-Means算法簡介
K-Means算法是數據挖掘領域的一個經典聚類算法。K-Means算法的任務是將給定的n個點聚到k個簇中。K-Means算法首先從包含k個中心點的初始集合開始,通過多次迭代并不斷調整中心位置,直到符合算法的預期。
K-Means算法執行步驟流程圖如圖3所示。

圖3 K-Means算法流程圖
因此,K-Means算法的核心可以歸納為:不斷地計算尋找聚類中心,并計算樣本點與聚類中心的距離,直到符合收斂條件時結束。其中距離是需要指定的,針對不同的數據類型選擇不同的距離計算方法才能提高聚類的質量。下面以最常見的歐式距離為例,假設樣本為n維向量,聚類內誤差如式(1)所示:

xi為第k個簇內樣本點的第i維向量值,ai為中心點的第i維向量值,則整個K簇的聚類空間的收斂條件為:

當E的值最小時,即滿足收斂條件,結束聚類。
5.2.2 基于K-Means算法的數據挖掘
在上述的基于Hive的離線分析部分中,挖泥船疏浚工藝點已經被提取出來并且進行了歸一化處理。此時數據存儲的格式是Hive默認的TextFile格式,由于Mahout要求輸入的數據格式為向量格式,因此需要先對源文件進行序列化,序列化后的數據格式為SequenceFile格式。
選用JavaAPI的方式進行操作,具體步驟如下:
1)通過JDBC連接Hive數據庫,獲取歸一化后的工藝點;
2)對工藝點序列化生成輸入向量SequenceFile;
3)將工藝點向量寫入HDFS文件系統輸入目錄;
4)寫入初始簇的中心;
5)運行K-Means聚類作業;
6)從輸出中讀取簇。
5.2.3 基于K-Means算法的聚類結果分析
在K-Means算法作業完成后,聚類結果輸出在result目錄下,其中每次迭代的結果也在輸出目錄中;聚類的最終結果是序列化文件,需要通過反序列化讀取聚類結果,如圖4所示。

圖4 聚類結果
通過查看最終次迭代完成的結果,可以看到聚類完成的4個簇,其中VL-21的21表示該簇的ID;c=[…]表示該簇的中心點;r=[…]表示該簇的半徑;進一步查看各個簇及簇內的聚類結果,如圖5所示。

圖5 簇內各點
聚類輸出進行反歸一化后4個聚類簇的中心如表1所示。
由聚類結果的簇中心進行分析,根據產量指標計算將不同的簇分為優、良、中、差。對所有數據進行聚類完成后,其中在優簇中的工藝點有17%,在良簇中的工藝點有32%,在中簇中的工藝點有37%,在差簇中的工藝點有14%。整理后的分簇工藝點分布如圖6所示。
根據聚類結果以及工藝點在優良中差簇中的分布,對該船次疏浚性能評估按照多級分配權值方法進行計算。計算得到的疏浚性能分將存儲在Hive表中。該表中記錄了歷史船次及其評分,并且將船次的評分進行排序,通過HQL查詢語句可以將排名高的船次及評分展現出來,供操作人員參考。

表1 疏浚工藝點聚類簇中心

圖6 疏浚工藝點簇分布圖
文中基于Hadoop生態圈技術提出了一種挖泥船大數據平臺架構,并對于構建挖泥船大數據平臺的采集模塊、存儲模塊與分析模塊進行了研究。以工藝點聚類為例,實現了對挖泥船疏浚性能的分析評估。實驗結果表明,基于Hadoop技術的挖泥船大數據平臺對于海量挖泥船疏浚歷史數據進行高效存儲、提取和處理具有重要的現實意義。