張 嘉,白曉飛,陶 超,張小桐
1(中國國土勘測規(guī)劃院,北京 100035)
2(廣東南方數(shù)碼科技股份有限公司,廣州 510665)
Foundation item:National Key Research and Development Program of China (2018YFD1100103-05);Program of Ministry of Natural Resources of the People’s Republic of China (1902-033-14)
國土數(shù)據(jù)類型多樣、結(jié)構(gòu)復(fù)雜、變化頻繁,具有很強(qiáng)的空間化、圖形化特征.近年來,隨著空間信息技術(shù)與資源環(huán)境管理工作普遍、深度交融,地表基質(zhì)、地表覆蓋、地下空間、業(yè)務(wù)信息等各類國土空間數(shù)據(jù)日趨復(fù)雜,涉及“山水林田湖草”及地質(zhì)、礦產(chǎn)等數(shù)百類自然資源要素,在地理空間上彼此映射、關(guān)聯(lián),且數(shù)據(jù)規(guī)模迅速增長.以全國土地調(diào)查矢量數(shù)據(jù)為例,年度更新數(shù)據(jù)超過2TB,累計(jì)要素?cái)?shù)已達(dá)41 億.自然資源政務(wù)審批和業(yè)務(wù)管理,需要高效分析上述海量數(shù)據(jù)間的位置和語義關(guān)系以輔助決策,這一過程往往需要進(jìn)行大量復(fù)雜空間運(yùn)算.面向大規(guī)??臻g數(shù)據(jù)分析,傳統(tǒng)關(guān)系型數(shù)據(jù)庫的空間數(shù)據(jù)存儲與計(jì)算框架愈發(fā)難以滿足實(shí)際需要.
隨著大數(shù)據(jù)技術(shù)快速發(fā)展,以云計(jì)算為代表的分布式計(jì)算技術(shù)以其高性能和高可靠性,特別是彈性擴(kuò)展的數(shù)據(jù)存儲與處理能力,為大規(guī)??臻g數(shù)據(jù)高效存儲與計(jì)算提供了可靠路徑[1-3].其中,Apache Hadoop 項(xiàng)目作為普遍流行的開源分布式大數(shù)據(jù)應(yīng)用框架,實(shí)現(xiàn)了MapReduce 分布式數(shù)據(jù)計(jì)算模型和HBase 分布式數(shù)據(jù)庫等核心應(yīng)用,支持基于集群的海量數(shù)據(jù)分布式存儲和運(yùn)算,在超大規(guī)模數(shù)據(jù)管理中得到廣泛運(yùn)用[4].近年來,為解決矢量數(shù)據(jù)空間分析的基本難題,基于Hadoop 應(yīng)用生態(tài)構(gòu)建了SpatialHadoop、Hadoop-GIS、Spatial-Spark、GeoSpark 等擴(kuò)展框架,為矢量數(shù)據(jù)存儲、索引和計(jì)算提供了基礎(chǔ)支持[5].
數(shù)據(jù)組織作為處理和操作的基石,其結(jié)構(gòu)和性能深刻影響統(tǒng)計(jì)、分析與服務(wù)效率,成為海量時(shí)空數(shù)據(jù)管理、應(yīng)用的關(guān)鍵問題之一.針對Hadoop 空間數(shù)據(jù)存儲與計(jì)算,相關(guān)學(xué)者在數(shù)據(jù)組織、索引構(gòu)建等方面進(jìn)行了研究.王凱等提出了基于Hadoop 的地理信息大數(shù)據(jù)處理模型,設(shè)計(jì)了矢量數(shù)據(jù)的格式轉(zhuǎn)換方法[6];范建永等利用HBase 進(jìn)行矢量空間數(shù)據(jù)管理,基于Map-Reduce 構(gòu)建了并行空間索引[7];李振舉等提出了一種四叉樹-Hilbert 結(jié)合的索引設(shè)計(jì)方法[8];朱進(jìn)等提出了一種基于內(nèi)存數(shù)據(jù)庫Redis 的輕量級矢量地理組織方法[9].但當(dāng)前研究主要集中在分布式數(shù)據(jù)存儲的負(fù)載均衡,未對索引、分區(qū)和計(jì)算進(jìn)行一體化考慮.
本文基于HBase 數(shù)據(jù)存儲與訪問的特性,使用四叉樹多級格網(wǎng)編碼算法進(jìn)行矢量要素編碼,構(gòu)建分布式空間數(shù)據(jù)索引;針對HBase 缺乏對矢量數(shù)據(jù)模型有效支持的問題,提出了一種通過行鍵編碼鏈接索引、分區(qū)與計(jì)算的數(shù)據(jù)組織模型和分布式處理機(jī)制,并設(shè)計(jì)了分布式計(jì)算的優(yōu)化流程,為大規(guī)??臻g數(shù)據(jù)存儲與處理提供了一種解決方案.
本文使用四叉樹多級格網(wǎng)算法對矢量數(shù)據(jù)進(jìn)行編碼構(gòu)建索引.該算法基于平面直角坐標(biāo)系劃分象限編碼,基本思想是將全域空間范圍劃分為4 個(gè)相等的區(qū)域并遞歸執(zhí)行,直到剖分層次達(dá)到指定深度[10,11].其處理流程可簡單描述為:第一,確定矢量要素集合的矩形空間范圍作為基準(zhǔn)格網(wǎng)并逐級剖分;第二,對剖分后的各級格網(wǎng)進(jìn)行編碼;第三,計(jì)算每個(gè)矢量要素的最小外接矩形;第四,根據(jù)最小外接矩形空間上映射的格網(wǎng),使用格網(wǎng)編碼對其遞歸賦值;第五,存儲每個(gè)矢量要素的編碼集合.可見,通過計(jì)算矢量要素外接矩形所在的格網(wǎng)編碼,可快速獲取該要素在相應(yīng)格網(wǎng)層級的空間位置,如圖1所示.格網(wǎng)的劃分層級與要素的編碼長度正相關(guān),過多層級會導(dǎo)致要素的編碼復(fù)雜性增大,并產(chǎn)生數(shù)據(jù)冗余.因此,格網(wǎng)編碼的深度應(yīng)根據(jù)數(shù)據(jù)特點(diǎn)進(jìn)行設(shè)計(jì),遵循的基本原則是確保大部分要素?fù)碛幸粋€(gè)編碼,允許少部分的要素?fù)碛卸鄠€(gè)編碼.
圖1 四叉樹編碼示意圖
將數(shù)據(jù)均衡分布到集群計(jì)算節(jié)點(diǎn),是充分利用分布式計(jì)算資源的必要條件.HBase 以region 作為數(shù)據(jù)擴(kuò)展和負(fù)載均衡的基本操作單元,分配到不同的計(jì)算服務(wù)器.HBase 表中的數(shù)據(jù)按照行鍵(RowKey) 排序,每個(gè)region 通過記錄起止行鍵管理表中的某些行數(shù)據(jù)[12].表首次創(chuàng)建時(shí),默認(rèn)只分配一個(gè)region,此時(shí)所有的讀寫操作都集中于這個(gè)region 所在的服務(wù)器,從而產(chǎn)生“熱點(diǎn)”(hot spotting)問題,導(dǎo)致該服務(wù)器負(fù)載急劇上升、性能下降;同時(shí),region 中導(dǎo)入的數(shù)據(jù)量達(dá)到一定閾值會觸發(fā)分裂(region-split),即找到一個(gè)中間行鍵(MidKey)將其拆分為兩個(gè)region,當(dāng)輸入大規(guī)模數(shù)據(jù)時(shí),分裂次數(shù)快速增加將大量占用磁盤I/O 資源,降低集群性能.針對上述問題,本文根據(jù)矢量數(shù)據(jù)的格網(wǎng)索引機(jī)制設(shè)計(jì)預(yù)分區(qū)策略,分區(qū)格網(wǎng)采用四叉樹剖分,當(dāng)預(yù)設(shè)4n(n≥1,n為剖分層級)個(gè)分區(qū)時(shí),以第n級格網(wǎng)編碼作為預(yù)分區(qū)號,如圖2.預(yù)分區(qū)號作為行鍵編碼的前綴,數(shù)據(jù)入庫時(shí)可自動(dòng)根據(jù)該編碼將要素均衡地向多個(gè)region 劃分.
使用MapReduce 框架進(jìn)行并行計(jì)算時(shí),分區(qū)數(shù)量決定了Map 函數(shù)的數(shù)量,即每個(gè)分區(qū)將啟動(dòng)一個(gè)Map 函數(shù)進(jìn)行計(jì)算,為保證計(jì)算和負(fù)載均衡,需合理預(yù)設(shè)分區(qū)數(shù)量,并考慮將相鄰空間要素聚集.分區(qū)個(gè)數(shù)過小,會造成單個(gè)分區(qū)的數(shù)據(jù)量過大,不利于負(fù)載均衡;分區(qū)個(gè)數(shù)過多,會導(dǎo)致單個(gè)分區(qū)內(nèi)數(shù)據(jù)量不足,不利于集中處理.實(shí)踐中,應(yīng)根據(jù)計(jì)算資源和數(shù)據(jù)量采用適當(dāng)?shù)姆謪^(qū)數(shù),原則上是充分利用集群的分布式特性,進(jìn)行大范圍空間計(jì)算時(shí),盡可能減少節(jié)點(diǎn)間數(shù)據(jù)傳輸,并使局部范圍計(jì)算在單個(gè)節(jié)點(diǎn)完成,以節(jié)約I/O 資源.一般而言,可以以集群中region server 數(shù)量的倍數(shù)作為參考值.
2.3.1 行鍵編碼方法
HBase 作為面向列存儲的數(shù)據(jù)庫,通過行鍵檢索數(shù)據(jù)的效率較高,每秒鐘可獲取1000~2000 條記錄,而檢索非Key 列時(shí)效率相對偏低.因此,建立空間數(shù)據(jù)格網(wǎng)編碼與行鍵編碼的關(guān)聯(lián),使行鍵編碼集成空間信息,是提高空間檢索效率的關(guān)鍵環(huán)節(jié).本文提出以預(yù)分區(qū)號、要素格網(wǎng)編碼和隨機(jī)碼組合構(gòu)建行鍵編碼的方法,該編碼集成了集群和要素空間信息,便于分布式處理.
GridCode為格網(wǎng)編碼,使用2.1 節(jié)中通過格網(wǎng)編碼算法生成的定長字符碼;Random為隨機(jī)碼,根據(jù)實(shí)際應(yīng)用中數(shù)據(jù)集的大小確定,用于保證行鍵編碼的唯一性;預(yù)分區(qū)號(Num)根據(jù)2.2 節(jié)確定的方法獲取,并根據(jù)格網(wǎng)剖分后空間相鄰矢量要素編碼通常前綴相同的特點(diǎn)進(jìn)行優(yōu)化:僅有一個(gè)編碼的要素,直接以其編碼值的后兩位作為預(yù)分區(qū)號;有多個(gè)編碼的要素,采用多個(gè)編碼共同前綴的后兩位作為預(yù)分區(qū)號.這種方法實(shí)現(xiàn)了索引、分區(qū)、計(jì)算的一體化設(shè)計(jì)(如圖3),使地理空間臨近的數(shù)據(jù)相對聚集,整體數(shù)據(jù)較均衡分布到各數(shù)據(jù)節(jié)點(diǎn),有助于提升空間分析的計(jì)算效率,同時(shí)便于索引的動(dòng)態(tài)更新維護(hù).
圖3 行鍵編碼與數(shù)據(jù)存儲計(jì)算
2.3.2 矢量數(shù)據(jù)表存儲
基于上述行鍵編碼方法,空間矢量數(shù)據(jù)在HBase中的表存儲設(shè)計(jì)如表1.其中,num[i]+gridCode[i]+random[i]構(gòu)成行鍵(“+”表示連接,行鍵字符串中不含該符號)唯一標(biāo)識表中的一條記錄.矢量要素存儲表設(shè)計(jì)了一個(gè)Column Family(列族)矢量信息,該列族下按照要素字段定義Qualifier(列限定符),列限定符與原矢量數(shù)據(jù)屬性名稱保持一致,存儲圖斑編號、地類、權(quán)屬等信息,其中SHAPE 存放JSON 格式的坐標(biāo)數(shù)據(jù).至此,實(shí)現(xiàn)了土地空間矢量數(shù)據(jù)從關(guān)系型數(shù)據(jù)組織向分布式數(shù)據(jù)存儲的轉(zhuǎn)換.
表1 空間數(shù)據(jù)存儲表結(jié)構(gòu)設(shè)計(jì)
(1)重復(fù)計(jì)算規(guī)避.基于格網(wǎng)的空間數(shù)據(jù)存儲本質(zhì)上是一種以空間換時(shí)間的設(shè)計(jì)模式.矢量要素空間大小不同,格網(wǎng)編碼算法生成的編碼值個(gè)數(shù)也隨之不盡相同,導(dǎo)致存入HBase 表中的同一要素可能存在多個(gè)記錄,不利于MapReduce 并行計(jì)算[13].為降低重復(fù)數(shù)據(jù)對計(jì)算性能的影響,本文將同一要素的多個(gè)記錄存儲在同一分區(qū),通過矢量要素標(biāo)識信息,在Map 函數(shù)計(jì)算階段構(gòu)建緩存記錄參與計(jì)算的要素,進(jìn)行去重操作,避免了數(shù)據(jù)重復(fù)計(jì)算和傳輸.
(2)空間數(shù)據(jù)關(guān)聯(lián)映射.針對參與空間計(jì)算的多元矢量數(shù)據(jù)集,按照格網(wǎng)編碼方法進(jìn)行統(tǒng)一編碼,矢量要素采用本文提出的行鍵編碼算法構(gòu)建數(shù)據(jù)對象間的編碼映射.計(jì)算時(shí)對無編碼映射關(guān)系的空間數(shù)據(jù)進(jìn)行過濾,可有效降低計(jì)算數(shù)據(jù)的規(guī)模.同時(shí),通過要素編碼可快速查找關(guān)聯(lián)要素,避免全表要素掃描,從而大幅減少程序遍歷次數(shù),提升了分布式計(jì)算的性能.
分布式計(jì)算一定程度上可以有效改善傳統(tǒng)模式下處理大規(guī)??臻g數(shù)據(jù)計(jì)算能力不足的問題.以空間疊加操作為例,典型的業(yè)務(wù)場景為:針對存儲于分布式數(shù)據(jù)庫中的地類圖斑矢量要素,使用外部存儲的、對應(yīng)縣級行政區(qū)劃內(nèi)的監(jiān)測圖斑與之進(jìn)行空間疊加,將疊加得到的裁切后矢量數(shù)據(jù)輸出,計(jì)算要素面積,并統(tǒng)計(jì)某類屬性下的土地面積匯總數(shù).以此為例,基于上述數(shù)據(jù)組織策略,本文設(shè)計(jì)了分布式計(jì)算方法,主要思路為:基于MapReduce 計(jì)算框架,結(jié)合Esri GIS Tools for Hadoop 工具,實(shí)現(xiàn)空間數(shù)據(jù)Map 函數(shù)計(jì)算,Reduce 函數(shù)執(zhí)行結(jié)果匯總并輸出.具體處理流程為:(1)將待疊加矢量要素轉(zhuǎn)換為JSON 文件,讀入HDFS 存儲,對其進(jìn)行格網(wǎng)編碼;(2)建立與被疊加地類圖斑矢量要素的編碼映射,獲取關(guān)聯(lián)的要素集合;(3)將關(guān)聯(lián)集合加載到分布式緩存中;(4)Map 函數(shù)逐條讀取地類圖斑矢量數(shù)據(jù),根據(jù)要素編碼獲取分布式緩存中集合中的對應(yīng)要素,并執(zhí)行空間疊加操作;(5)輸出裁切后的數(shù)據(jù),并將過程數(shù)據(jù)傳送Reduce 函數(shù)處理;(6)Reduce 函數(shù)完成計(jì)算結(jié)果的匯總及輸出.總體流程如圖4.
圖4 空間數(shù)據(jù)裁切操作流程
針對本文提出的格網(wǎng)編碼索引、預(yù)分區(qū)及行鍵優(yōu)化設(shè)計(jì)的空間數(shù)據(jù)組織策略和計(jì)算流程,使用真實(shí)數(shù)據(jù),采用空間疊加與統(tǒng)計(jì)場景進(jìn)行測試,驗(yàn)證方案的有效性.
基于Hadoop 2.7.3 搭建一個(gè)主節(jié)點(diǎn),4 個(gè)數(shù)據(jù)節(jié)點(diǎn)的集群環(huán)境(圖5),在該集群部署HBase 1.3.1.數(shù)據(jù)節(jié)點(diǎn)服務(wù)器配置為:CPU Intel(R) Xeon(R) CPU E5-2609 v4 @ 1.70 GHz;內(nèi)存:128 GB;操作系統(tǒng):CentOS7.3;網(wǎng)絡(luò)帶寬為1000 Mb/s.
4.2.1 測試數(shù)據(jù)
180個(gè)縣級行政區(qū)劃單位的地類圖斑(DLTB)和監(jiān)測圖斑(JCTB),兩類數(shù)據(jù)都是空間矢量要素.為便于對比,將其分為8 個(gè)測試組,每組所含要素和數(shù)據(jù)量如表2所示.
圖5 測試環(huán)境
表2 數(shù)據(jù)分組及要素?cái)?shù)
4.2.2 測試內(nèi)容與流程
自然資源管理中,地類圖斑刻畫了土地利用的現(xiàn)狀情況,按照規(guī)定的時(shí)點(diǎn)更新.遙感監(jiān)測是維護(hù)土地現(xiàn)狀信息準(zhǔn)確性和現(xiàn)勢性的重要手段,通過對比、判讀不同時(shí)相的遙感影像,能夠識別發(fā)生變化的國土特征信息,這些變化信息經(jīng)矢量化形成監(jiān)測圖斑.業(yè)務(wù)實(shí)踐中,一種典型的應(yīng)用場景是獲取監(jiān)測圖斑空間范圍內(nèi)變更前的土地利用類型和面積等數(shù)據(jù),以輔助數(shù)據(jù)更新、變化分析和行政監(jiān)管.本文將監(jiān)測圖斑與地類圖斑進(jìn)行空間疊加,獲取監(jiān)測圖斑的地類面積、權(quán)屬等信息,測試研究提出的分布式存儲與計(jì)算方案下空間數(shù)據(jù)分析和匯總統(tǒng)計(jì)的效率,主要流程如下:(1)將地類圖斑數(shù)據(jù)作為疊加底圖,創(chuàng)建格網(wǎng)索引,存儲在HBase 分布式數(shù)據(jù)庫;(2)以監(jiān)測圖斑作為外部疊加數(shù)據(jù),采用GIS Tools for Hadoop 插件工具集將其轉(zhuǎn)換為以縣級行政區(qū)為單位的JSON 文件,存儲于HDFS 分布式文件系統(tǒng);(3)基于MapReduce 框架對監(jiān)測圖斑和地類圖斑進(jìn)行疊加,提取地類信息并計(jì)算面積,匯總形成監(jiān)測圖斑地類面積匯總表,并輸出疊加后的圖形數(shù)據(jù),驗(yàn)證其正確性.
4.2.3 結(jié)果分析
按照測試流程對8 個(gè)測試組按照執(zhí)行數(shù)據(jù)操作,記錄數(shù)據(jù)上傳、數(shù)據(jù)轉(zhuǎn)換、空間疊加、統(tǒng)計(jì)輸出幾項(xiàng)主要處理環(huán)節(jié)的耗時(shí)情況,如表3.
表3 測試耗時(shí)結(jié)果記錄(單位:s)
對表3數(shù)據(jù)進(jìn)行分析,結(jié)果表明:
(1)數(shù)據(jù)處理耗時(shí)與數(shù)據(jù)量正相關(guān),但隨著數(shù)據(jù)量的增加,計(jì)算效率呈現(xiàn)階段特征.在地類圖斑數(shù)由5000 向50 萬量級增長過程中,處理要素的平均耗時(shí)顯著下降,由平均0.29 秒/要素降為0.01 秒/要素,說明單位時(shí)間系統(tǒng)處理要素的能力在迅速提升,充分體現(xiàn)了分布式環(huán)境處理大規(guī)模數(shù)據(jù)的優(yōu)勢;當(dāng)要素?cái)?shù)據(jù)超過50 萬后,單位時(shí)間處理要素的數(shù)量變化曲線基本平滑,這是由于服務(wù)器數(shù)量固定導(dǎo)致計(jì)算資源受限,可以預(yù)測增加計(jì)算節(jié)點(diǎn),能夠進(jìn)一步提高性能.
(2)空間疊加環(huán)節(jié)在總體分析流程中的耗時(shí)居支配地位,且遠(yuǎn)高于其他環(huán)節(jié),占比區(qū)間為94.45% 至98.02%,這說明空間數(shù)據(jù)并行計(jì)算是數(shù)據(jù)分析的核心,也是計(jì)算優(yōu)化的重點(diǎn).
根據(jù)上述分析結(jié)果,進(jìn)一步測試本文提出的索引、預(yù)分區(qū)及行鍵編碼一體化設(shè)計(jì)的空間數(shù)據(jù)組織策略(記作GRID),與常規(guī)采用隨機(jī)散列構(gòu)建行鍵編碼方法(記作RHASH)的空間分析效率對比.為降低計(jì)算資源對數(shù)據(jù)處理效率的影響,測試數(shù)據(jù)選擇18 個(gè)縣級行政單元的地類圖斑和監(jiān)測圖斑矢量要素(共90 萬個(gè)要素),分為5 個(gè)測試組,記錄空間疊加的處理時(shí)間,如表4所示.
表4 空間疊加測試記錄
可見,GRID 優(yōu)化方法空間疊加的耗時(shí)在各測試組均顯著低于RHASH 方法,且隨著數(shù)據(jù)規(guī)模的增加,其效率優(yōu)勢進(jìn)一步顯現(xiàn),測試要素?cái)?shù)據(jù)量區(qū)間最大側(cè)的執(zhí)行效率提升了1 倍.這主要是由于未優(yōu)化方案不能根據(jù)疊加數(shù)據(jù)從HBase 表中快速過濾與其相關(guān)的信息,需進(jìn)行全表掃描,并判斷每條數(shù)據(jù)與疊加數(shù)據(jù)的空間關(guān)系.本文提出的優(yōu)化策略彌補(bǔ)了這一不足,大幅降低了MapReduce 處理的數(shù)據(jù)量,從而有效提升了計(jì)算性能.
總體來看,分布式存儲與計(jì)算環(huán)境下,空間數(shù)據(jù)處理效率較關(guān)系型數(shù)據(jù)庫大幅增加.在硬件資源要求并不苛刻的條件下,近600 萬地類圖斑矢量要素的全流程疊加操作耗時(shí)僅20 分鐘,而關(guān)系型數(shù)據(jù)庫下的同量級相似數(shù)據(jù)處理需投入大量作業(yè)人員使用不同客戶端執(zhí)行操作,時(shí)間單位往往以工作日計(jì).因此,在海量國土空間矢量數(shù)據(jù)管理與分析中,將分布式存儲、計(jì)算技術(shù)與空間數(shù)據(jù)特性充分優(yōu)化結(jié)合,能夠大幅提升工作效率.
本文對空間矢量數(shù)據(jù)的分布式存儲與計(jì)算技術(shù)進(jìn)行了探索,研究了基于四叉樹格網(wǎng)構(gòu)建空間索引的方法,結(jié)合矢量數(shù)據(jù)的特性,將其與HBase 預(yù)分區(qū)策略和分布式存儲設(shè)計(jì)有效融合.同時(shí),基于Hadoop 處理模型,設(shè)計(jì)了與之銜接的分布式計(jì)算流程,形成了一種分布式場景下矢量數(shù)據(jù)組織與計(jì)算的優(yōu)化方法.后續(xù)工作中,擬擴(kuò)大集群和數(shù)據(jù)規(guī)模,全面調(diào)試并進(jìn)一步提升其實(shí)用性.