田茂春 賴 杭
(珠江水利科學(xué)研究院,廣東 廣州 510610)
隨著科學(xué)技術(shù)的不斷發(fā)展,遙感技術(shù)和地理測(cè)繪技術(shù)也在不斷的完善,當(dāng)前,已經(jīng)能獲取到較高分辨率,文件巨大的遙感影像數(shù)據(jù)。
針對(duì)影像數(shù)據(jù)比較大的特點(diǎn),運(yùn)用金字塔模型的方式能夠?qū)⒉煌直媛实挠跋襁M(jìn)行調(diào)整,從而實(shí)現(xiàn)不同分辨率之間的有效瀏覽[1-2]。
另外,常規(guī)的串行方法通常適用于相對(duì)小規(guī)模的遙感數(shù)據(jù),為對(duì)大數(shù)據(jù)量的遙感影像進(jìn)行分析,往往采用MapReduce[3-5],但在針對(duì)高分遙感影像進(jìn)行處理時(shí),所耗費(fèi)的時(shí)間仍然相對(duì)較長(zhǎng),并且海量遙感影像的可視化過程非常緩慢。
已有學(xué)者利用分布式計(jì)算框架來對(duì)遙感影像處理,如存儲(chǔ)、鑲嵌、金字塔構(gòu)建等方面做出了廣泛研究[6]。在遙感影像處理方面,黃冬梅[7]等提出了基于Spark,采用并行的方法來進(jìn)行影像金字塔構(gòu)建。在影像切片及元數(shù)據(jù)存儲(chǔ)方面,文獻(xiàn)[8]研究表明了可以利用NOSQL 進(jìn)行影像元數(shù)據(jù)或切片進(jìn)行存儲(chǔ),但大多是元數(shù)據(jù)用NOSQL 存儲(chǔ),瓦片數(shù)據(jù)用文件系統(tǒng)或者是多個(gè)數(shù)據(jù)庫配合使用來達(dá)到目的,此外,對(duì)影響瓦片快速讀取的索引策略并沒有做更深入的研究。
在當(dāng)前的技術(shù)中,可以發(fā)現(xiàn),海量遙感管理與在線可視化瀏覽技術(shù)之間處于相互獨(dú)立的狀態(tài),為了有效地解決遙感技術(shù)信息儲(chǔ)存的問題需要結(jié)合遙感數(shù)據(jù)發(fā)布的需求進(jìn)行調(diào)整。
本文基于分布式文件存儲(chǔ)、分布式計(jì)算框架等技術(shù),開展了遙感影像數(shù)據(jù)的分布式存儲(chǔ)、高效檢索和地圖服務(wù)即時(shí)發(fā)布等關(guān)鍵技術(shù)研究,構(gòu)建影像即時(shí)切片服務(wù)發(fā)布平臺(tái),能夠使大量堆積的數(shù)據(jù)得到有效管理和利用,以滿足項(xiàng)目影像服務(wù)應(yīng)用需求。
Hadoop 是一個(gè)由Apache 基金會(huì)所開發(fā)的分布式系統(tǒng)基礎(chǔ)架構(gòu)。開發(fā)者可在不了解分布式底層細(xì)節(jié)的情況下,開發(fā)分布式程序,充分利用集群的威力進(jìn)行高速運(yùn)算和存儲(chǔ)。Hadoop 實(shí)現(xiàn)了一個(gè)分布式文件系統(tǒng)(Distributed File System),其中一個(gè)組件是HDFS。隨著Hadoop不斷發(fā)展,存儲(chǔ)結(jié)構(gòu)已不限于最初的HDFS(大文件存儲(chǔ)),而像HBASE 分布式列數(shù)據(jù)庫也得到了 大量發(fā)展和應(yīng)用。
而在計(jì)算引擎方面,除了MapReduce 這種適合離線計(jì)算的引擎外,又?jǐn)U展了適合內(nèi)存計(jì)算的Spark 計(jì)算框架以及實(shí)時(shí)流計(jì)算框架Storm。此外,Hadoop 生態(tài)圈還包含了日志收集器Flume、腳本Pig、資源管理器Yarn 等組件。
Apache Spark 是當(dāng)前針對(duì)大數(shù)據(jù)處理設(shè)計(jì)的計(jì)算引擎,Spark 對(duì)大規(guī)模數(shù)據(jù)的快速處理優(yōu)勢(shì)使其在海量影像計(jì)算處理方面有著廣泛應(yīng)用基礎(chǔ)。
MongoDB 是10gen 公司基于C 語言研發(fā)的一個(gè)開源的基于分布式文件存儲(chǔ)的NoSQL 數(shù)據(jù)庫系統(tǒng)。相比關(guān)系數(shù)據(jù)庫,易用性更強(qiáng),功能非常豐富,擴(kuò)展了比如地理信息查詢、儲(chǔ)存等功能。另外,查詢語言非常強(qiáng)大也是MongoDB 的一大特點(diǎn)。
上述MongoDB 的特點(diǎn)使其非常適用于數(shù)據(jù)量大,查詢性能較高的業(yè)務(wù),特別是針對(duì)多元遙感影像元數(shù)據(jù)管理。
遙感影像來源多樣,描述其數(shù)據(jù)的元數(shù)據(jù)往往也各不相同,傳統(tǒng)的xml 文件存儲(chǔ)方式讀取解析繁瑣,不易于應(yīng)用系統(tǒng)集成使用,而如果以關(guān)系型數(shù)據(jù)庫存儲(chǔ),由于各元數(shù)據(jù)屬性差別較大,為同時(shí)滿足不同源元數(shù)據(jù)存儲(chǔ),關(guān)系表列是所有類型遙感影像元數(shù)據(jù)的并集,存儲(chǔ)時(shí)存在很多字段為空情況,造成存儲(chǔ)資源浪費(fèi)。而NOSQL 數(shù)據(jù)庫的代表——分布式文件數(shù)據(jù)庫MongoDB,以類JSON 方式進(jìn)行數(shù)據(jù)存儲(chǔ),可隨時(shí)對(duì)存儲(chǔ)結(jié)構(gòu)進(jìn)行修改,特別適合于多源遙感影像元數(shù)據(jù)存儲(chǔ)。
本文設(shè)計(jì)了用于建立多星源遙感影像關(guān)鍵屬性(時(shí)相、產(chǎn)品名稱、分辨率等)到遙感影像元數(shù)據(jù)表的映射表,入庫時(shí)通過該模板表將xml 中元數(shù)據(jù)屬性映射入庫。同時(shí),設(shè)計(jì)了用于存儲(chǔ)各種星源的元數(shù)據(jù),入庫時(shí)根據(jù)元數(shù)據(jù)關(guān)鍵屬性模板表,將解析的xml 文檔元數(shù)據(jù)主要屬性映射成本表中關(guān)鍵屬性,xml 文檔元數(shù)據(jù)剩余屬性按其(tag,value)也存入該表的影像元數(shù)據(jù)表。
在元數(shù)據(jù)入庫及顯示方面,根據(jù)遙感影像檢索以及元數(shù)據(jù)查詢顯示需求,采用設(shè)計(jì)入庫模板、顯示配置模板的方式支持任意類型的多源遙感影像入庫及查詢顯示。在元數(shù)據(jù)索引方面,采取建立地理空間索引+多個(gè)關(guān)鍵屬性的復(fù)合索引鍵,如地理范圍、時(shí)相、觀測(cè)時(shí)間、云量、分辨率、傳感器類型等來實(shí)現(xiàn)遙感影像快速檢索。
遙感影像分辨率高、文件大,傳統(tǒng)的文件系統(tǒng)存儲(chǔ)方式管理不便、安全性低,且單機(jī)存儲(chǔ)不適合在高并發(fā)訪問下使用。
結(jié)合遙感影像數(shù)據(jù)的特點(diǎn),一般會(huì)選擇HDFS 作為分布式文件管理的數(shù)據(jù)庫,其能夠支持?jǐn)?shù)百個(gè)儲(chǔ)存節(jié)點(diǎn),另外,可以使用添加節(jié)點(diǎn)的方式來擴(kuò)充儲(chǔ)存,而且可以高吞吐訪問應(yīng)用程序數(shù)據(jù),適合那些有海量數(shù)據(jù)集的應(yīng)用。利用分布式文件系統(tǒng)HDFS 將遙感影像大文件切成幾十或上百兆大小的數(shù)據(jù)塊,每塊分散在分布式集群各數(shù)據(jù)點(diǎn)并以復(fù)制集的方式存儲(chǔ),提高了數(shù)據(jù)存取的并行性以及數(shù)據(jù)安全性。另外,分布式計(jì)算框架“將計(jì)算移動(dòng)到數(shù)據(jù)”的特點(diǎn),也充分利用了分布式文件系統(tǒng)分散存儲(chǔ)的優(yōu)勢(shì)。
遙感影像在HDFS 上的存儲(chǔ)采取多副本方式,其中每一個(gè)數(shù)據(jù)塊中有多個(gè)副本,并且儲(chǔ)存于不同的服務(wù)器之上,當(dāng)前,工業(yè)界會(huì)使用三副本的方式,通過這樣的形式,能夠有效地保證數(shù)據(jù)的使用不會(huì)丟失,能夠恢復(fù)相應(yīng)的數(shù)據(jù)塊,并由此保證提供數(shù)據(jù)的高效性,同時(shí),讀數(shù)據(jù)時(shí)可以提高讀的效率。
MongoDB 可以存儲(chǔ)結(jié)構(gòu)非常復(fù)雜的數(shù)據(jù)類型,尤其是非結(jié)構(gòu)化數(shù)據(jù),其充分利用內(nèi)存的方式得到了比關(guān)系型數(shù)據(jù)庫Mysql、Oracle 大數(shù)倍的查詢吞吐率,在項(xiàng)目中研究了在MongoDB 數(shù)據(jù)庫上進(jìn)行“小文件”式的影像瓦片存儲(chǔ)。切片索引鍵設(shè)計(jì)和切片數(shù)據(jù),設(shè)計(jì)MongoDB 切片存儲(chǔ)文檔結(jié)構(gòu)。MongoDB 插入文檔時(shí)自動(dòng)生成的主鍵,TID 為切片索引鍵,數(shù)據(jù)類型為字符串,IMG 是切片數(shù)據(jù),為二進(jìn)制數(shù)組Binary 形式。
通過利用金字塔模型,根據(jù)不同分辨率進(jìn)行影像的調(diào)整,這對(duì)于數(shù)據(jù)庫的儲(chǔ)存和運(yùn)行效率有較高的要求,然而,常規(guī)的串行計(jì)算方法僅僅適用于內(nèi)存較小,規(guī)模較小的遙感數(shù)據(jù)。當(dāng)前所利用Map Reduce 的分布式計(jì)算框架方式能大大提高金字塔構(gòu)建效率的方法,但是在涉及海量、多元以及高分遙感影像時(shí),所耗費(fèi)時(shí)間仍然很長(zhǎng)。而分布式計(jì)算框架Spark 由于將計(jì)算中間結(jié)果存儲(chǔ)于內(nèi)存,大量減少了中間結(jié)果存取的時(shí)間,在分布式計(jì)算領(lǐng)域得到了廣泛應(yīng)用。在研究Spark 計(jì)算框架轉(zhuǎn)換、行動(dòng)算子基礎(chǔ)上,將瓦片任務(wù)分解成并行執(zhí)行的轉(zhuǎn)換算子和行動(dòng)算子算法,實(shí)現(xiàn)影像瓦片的并行構(gòu)建。在影像瓦片輸出方面,由于影像瓦片數(shù)據(jù)具有單個(gè)瓦片數(shù)據(jù)量小、瓦片數(shù)量巨大的特點(diǎn),通過研究Spark 分區(qū)特點(diǎn),設(shè)計(jì)將每個(gè)分區(qū)多個(gè)瓦片合并為一個(gè)批次輸出至數(shù)據(jù)庫來提高并行性。
在前述關(guān)鍵技術(shù)研究基礎(chǔ)上,將SSM 框架與Spark分布式計(jì)算框架進(jìn)行集成,梳理遙感影像地圖服務(wù)應(yīng)用方式,構(gòu)建海量遙感影像從存儲(chǔ)、瓦片并行生成、地圖服務(wù)即時(shí)發(fā)布、地圖服務(wù)即時(shí)共享使用的影像即時(shí)切片服務(wù)發(fā)布平臺(tái),為各個(gè)項(xiàng)目提供影像數(shù)據(jù)服務(wù)。影像即時(shí)共享發(fā)布流程如圖1 所示。
圖1 影像即時(shí)切片服務(wù)發(fā)布流程圖
影像即時(shí)切片服務(wù)發(fā)布平臺(tái)已成功應(yīng)用于河湖長(zhǎng)制、河湖岸線監(jiān)管、水土保持監(jiān)管等依賴大量遙感影像數(shù)據(jù)的項(xiàng)目中,為項(xiàng)目中遙感影像的管理、查找及快速查看提供了技術(shù)及平臺(tái)支撐,進(jìn)一步提高了遙感數(shù)據(jù)的使用效率。利用平臺(tái)可進(jìn)行多源海量的遙感影像的并行切片與生成任務(wù)在線提交,同時(shí),可以快速查看原始遙感影像數(shù)據(jù)及元數(shù)據(jù)信息,方便用戶篩選數(shù)據(jù)質(zhì)量最優(yōu)的遙感影像用于遙感解譯及后期的數(shù)據(jù)應(yīng)用業(yè)務(wù)。
本文利用分布式文件系統(tǒng)、分布式數(shù)據(jù)庫、分布式計(jì)算等技術(shù),對(duì)多源遙感影像數(shù)據(jù)進(jìn)行高效存儲(chǔ),完成了遙感影像快速構(gòu)建金字塔、瓦片的并行計(jì)算與生成;設(shè)計(jì)了影像元數(shù)據(jù)、影像瓦片的索引算法,實(shí)現(xiàn)影像高效檢索、瓦片快速讀取,構(gòu)建了影像切片即時(shí)發(fā)布服務(wù)平臺(tái),為更有序、更高效管理遙感數(shù)據(jù),快速提供遙感地圖服務(wù)及可視化顯示,實(shí)現(xiàn)“數(shù)據(jù)到服務(wù)”提供了一體化技術(shù)方案。