包 磊 彭慶喜
(武漢東湖學院計算機科學學院 武漢 430079)
海洋位置大數據是指含有空間位置和時間標識的海上地理和人類社會信息數據,包括海洋地理環境數據、海上移動對象軌跡數據和海上空間媒體數據[1]。此類數據具有大數據所共有的數據類型多樣、數據變化高速、數據規模海量和數據價值密度低等特性。同時其分布更加不均勻,時空跨度更大,過程中受水文、氣象、人員以及船舶狀態等大量因素影響。船舶自動識別系統(Auto Identification System,AIS)、GPS及北斗導航系統、國家海洋預警探測系統、以及Argo、海王星等諸多海洋觀測計劃源源不斷地提供著海量數據,其數據量早已達到了TB級別,且呈持續增長的趨勢。僅僅以AIS數據為例,全球每天通過衛星和基站收集的AIS數據約為4G,一年產生的AIS數據量可達1.4TB。建立適合海上位置大數據特性的平臺,對相關數據進行采集、存儲、分析和利用是當前一個焦點問題。
由于傳統大數據平臺無法對數據的時空特征提供有力支持,海洋位置大數據的處理必須采用能夠支持空間數據類型的空間大數據平臺。目前空間大數據平臺的實現有兩種思路:其一,以空間數據庫實現空間數據存儲,結合分布式引擎Hadoop/Spark進行空間運算,形成分布式空間數據分析框架;其二,采取基于普通大數據處理平臺Hadoop/Spark架構逐層拓展的方法,使其對空間數據處理具有敏感性。其中,Hadoop-GIS[2]通過與 Hive集成,利用MapReduce處理邊界對象,實現了Hadoop的大型空間運算[3]。將數據存儲在Post-GIS中,通過Java拓撲套件實現了用戶自定義函數在Hadoop/Hive上的空間運算。Esri的Spatial Framework for Hadoop[4]將 ArcGIS與Hadoop集成,通過在 Hive中注冊空間查詢函數,查詢Hadoop分布式文件系統(HDFS)上的空間數據,提高了空間大數據的并行化處理能力。SpatialHadoop對傳統Hadoop存儲架構進行了空間擴充,并設計了專用的Mapreduce計算方法來實現一些空間操作,用于支持空間位置數據處理[5]。GeoSpark[6]是建立了一種基于 Spark 的空間大數據處理架構,使用Apache Spark作為底層支持,使用空間RDD數據分布方法建立了空間查詢的處理和計算能力。
由于側重點不同,現有方法在存儲層、計算層或基本操作層存在不同程度的不足,有的使用HDFS存儲空間數據,無法建立空間索引,有的對空間數據格式存在一定限制,數據管理難度高。本文根據海洋位置大數據的特點和處理分析能力需求,對Hadoop平臺進行了擴充,設計了一種專用數據處理平臺架構,在數據類型層、存儲層、計算層和基本操作層對海洋位置大數據提供了支持。
海洋位置大數據分析平臺的核心部分是位置大數據的存儲、計算和分析結構。在存儲上沿用Hadoop的HDFS分布式文件存儲系統,同時通過添加空間索引結構來提高計算效率。空間索引在文件輸入時建立,使空間位置鄰近的數據對象存儲于同一個HDFS塊內,并對塊內數據建立索引。建立好的索引文件作為MapReduce計算框架的輸入文件。并根據空間索引擴充MapReduce組件結合所實現功能的數據需求,利用索引文件濾除不相關數據,避免產生不必要的計算冗余。基于擴充MapReduce框架,實現基本空間分析操作,包括空間對象的基本拓撲操作以及范圍查詢,KNN最近鄰查詢等。基于這些基本空間分析操作可以進一步完成統計分析、時空聚類、分類或模式挖掘分析和可視化。如圖1所示。

圖1 海洋位置大數據分析平臺架構
平臺架構的核心設計為涵蓋數據存儲與計算的數據處理框架設計。空間Hadoop數據處理框架是在傳統Hadoop數據處理框架的基礎上對數據類型層[8~9]、存儲層、計算層和操作層等核心內容進行空間拓展而來。
在Hadoop上直接構建傳統空間索引會遇到兩個問題:其一,傳統空間索引采用過程編程范式,而Hadoop采用的是MapReduce編程范式;其二,傳統索引采用局部文件系統,而Hadoop采用HDFS分布式文件系統。為了克服這些問題,采用兩級空間索引結構(即全局索引和本地索引)。全局索引在集群節點間分割數據,本地索引在節點內部高效地組織數據,兩級空間索引結構適合MapReduce編程范式。索引建立由三個階段組成,即數據分區階段、本地索引建立階段和全局索引建立階段。
1)數據分區階段
數據分區決定如何使用相互獨立的空間矩形劃分空間區域。不同的空間索引算法具有不同的劃分過程和結果。在圖2、圖3中分別給出了均勻分布網格Grid索引和R-tree索引[10]的不同分區結果。
根據所確定的分割邊界,創建一個MapReduce任務來實現物理分割。分割的難點在于如何處理跨邊界對象。這里采用的方式為允許將該對象重復劃分到所有覆蓋的分區,而在后續計算過程中加以專門處理。
2)本地索引建立階段
本地索引是單個分區內數據對象的空間索引結構(如網格索引或R-tree索引),并作為本地索引存儲于Slave節點上。本地索引的存儲位置為每個HDFS塊,這樣有利于:(1)允許空間操作使用MapReduce任務的單個Map函數去處理本地索引;
(2)本地索引處理均衡化。

圖2 Grid索引分區
3)全局索引構建階段
建立所有本地索引的總體索引結構,并作為全局索引存儲于Master節點上。因此,Master節點可以利用全局索引查詢與任意矩形區域重疊的所有本地索引文件。
基于HDFS的空間索引結構是MapReduce空間計算框架的基礎。傳統的Hadoop中MapReduce計算框架處理的對象為不帶索引的堆文件。由專用的分割器將將輸入文件分割為多個分區,使用對應的映射函數,將分區解析為對應的鍵值,進而傳遞給Map函數進行處理。Map函數的處理結果傳入Reduce函數進行處理。最后將Reduce函數的輸出結果作為最終結果輸出。
在這種機制上,考慮到空間索引,我們給出的計算框架在MapReduce層設計了兩個新組件,即SF-Splitter組件和SR-Reader組件。SF-Splitter組件是傳統MapReduce分割器的拓展,其輸入是全局索引文件,利用全局空間索引,根據其空間位置對數據文件進行修剪,建立數據分區,傳給SR-Reader進行后續處理。與傳統Map函數不同,SR-Reader組件獲取局部索引,按照數據塊的空間區域最小外界矩形將局部索引的指針傳遞給Map函數,經過Map函數處理的鍵值傳遞給Reduce函數進行處理,后續處理與傳統Hadoop計算框架一致。

圖4 基于MapReduce空間位置數據計算框架
在存儲層和計算層設計基礎上,平臺架構支持常用空間操作的設計與開發,基本空間操作[11~12]見表1。

表1 基本空間操作
以Rangequery操作為例:Rangequery操作的輸入是一個區域A和一個空間對象集合R,輸出為集合R中所有被包含在A中的對象集合。算法通過兩步完成,首先利用所建立的空間索引篩選空間對象,然后利用空間拓撲分析操作對各個數據分塊中的數據進行拓撲計算,最后整合結果。
根據海洋位置大數據特點和分析需求,本文設計了基于Hadoop的分析平臺架構。平臺的核心處理框架從數據類型層、存儲層、計算層和基本操作層進行了拓展。數據類型層包括點、線段和面三種類型。存儲層在HDFS的基礎上插入了兩級空間索引結構,支持Grid File、R-tree索引和R+tree索引的建立。計算層增加了兩個新組件,用于支持索引文件的處理。按照此平臺架構,我們建立了一個原型系統,實現了最小外接矩形MBR、空間范圍查詢以及空間KNN等六種基本操作,并以此作為后臺數據處理引擎,使用實際AIS數據進行了初步的統計和時空數據挖掘實驗。如圖5~7所示,在這些實際應用中,我們建立的一個4個節點的小型平臺,能夠以高于傳統Hadoop框架一個數量級以上的速度處理10g以上的數據集,取得了相當好的結果。

圖5 船舶熱點海域計算[7](數據量9G,馬拉西亞附近海域)

圖6 船舶航跡聚類計算(數據量3G,瓊州海峽)


圖7 船舶航跡聚類與異常檢測計算(數據量7G,紐約港附近海域)
基于平臺,海洋位置數據經過統計分析、時空分類、聚類以及模式挖掘分析和可視化分析可以為海洋環境監測、航線優化、軌跡預測、海上危機評估和海上監管等應用提供服務。然而,為獲得更好的分析結果,僅對位置數據進行分析處理是不夠的,必須融合多源數據進行綜合分析或協同挖掘,這要求平臺應具備多種異質異構大數據的處理和分析能力。另外,本文中的平臺只提供了空間索引能力,并未提供在時間上的有效索引機制。這些都是下一步需要研究的方向。