袁昱緯 衛(wèi) 強(qiáng) 楊亞鵬 夏明卓
(中國(guó)人民解放軍91977 部隊(duì),北京 100036)
隨著成像衛(wèi)星分辨率的不斷提高和星座規(guī)模的不斷增大,衛(wèi)星對(duì)地觀測(cè)獲得的高質(zhì)量、大范圍影像數(shù)據(jù)越來(lái)越多,衛(wèi)星影像在農(nóng)林生產(chǎn)、環(huán)境監(jiān)測(cè)、地理信息系統(tǒng)等領(lǐng)域也獲得廣泛應(yīng)用。 同時(shí),衛(wèi)星影像的數(shù)據(jù)量也呈幾何級(jí)數(shù)增長(zhǎng),對(duì)影像數(shù)據(jù)管理系統(tǒng)的功能性能需求越來(lái)越高,如無(wú)法及時(shí)、高效地進(jìn)行組織管理,衛(wèi)星影像海量的數(shù)據(jù)規(guī)模將成為其應(yīng)用的嚴(yán)重障礙。
Hadoop 是目前存儲(chǔ)、管理和處理大數(shù)據(jù)的主流開源平臺(tái)之一, 能夠提供高效的海量衛(wèi)星影像數(shù)據(jù)管理與處理的環(huán)境,具有可靠性高、運(yùn)行效率高、擴(kuò)展性好、易于維護(hù)等優(yōu)點(diǎn),在影像管理與應(yīng)用領(lǐng)域取得了良好的應(yīng)用效果。 因此,本文通過(guò)分析衛(wèi)星影像大數(shù)據(jù)管理系統(tǒng)特點(diǎn)與功能需求,基于Hadoop 平臺(tái)提出了系統(tǒng)總體構(gòu)架,并通過(guò)研究相關(guān)關(guān)鍵技術(shù),設(shè)計(jì)和實(shí)現(xiàn)基于Hadoop 平臺(tái)的海量衛(wèi)星影像大數(shù)據(jù)管理系統(tǒng)。
衛(wèi)星影像大數(shù)據(jù)管理系統(tǒng)的特點(diǎn)主要包括:(1)支持的衛(wèi)星影像數(shù)據(jù)規(guī)模大, 存儲(chǔ)的數(shù)據(jù)量已由GB級(jí)提高至TB 級(jí)、甚至PB 級(jí),且支持多分辨率、多類型的衛(wèi)星影像;(2)大規(guī)模衛(wèi)星影像的組織管理效率高,衛(wèi)星數(shù)據(jù)的導(dǎo)入、索引、修改、讀取等組織管理效率不隨影像數(shù)據(jù)量的增大而顯著增大, 當(dāng)數(shù)據(jù)集已存在TB 級(jí)規(guī)模的數(shù)據(jù)量時(shí), 仍然具有較高的組織管理效率;(3)支持衛(wèi)星影像元數(shù)據(jù)管理,能夠組織管理衛(wèi)星影像的各類屬性信息,如影像名稱、衛(wèi)星標(biāo)識(shí)、衛(wèi)星成像參數(shù)、空間分辨率、成像區(qū)域、成像時(shí)間等;(4)易于工程實(shí)現(xiàn),軟件部署和日常操作便捷。 綜上,本文將衛(wèi)星影像大數(shù)據(jù)管理系統(tǒng)的功能需求劃分為以下三個(gè)階段。
(1)衛(wèi)星影像的入庫(kù)與管理。 主要包括衛(wèi)星影像數(shù)據(jù)及其元數(shù)據(jù)的數(shù)據(jù)庫(kù)構(gòu)建、 存儲(chǔ)與管理功能,多源異構(gòu)數(shù)據(jù)能夠在統(tǒng)一構(gòu)建的平臺(tái)上存儲(chǔ),且支持分布式物理存儲(chǔ)。
(2)衛(wèi)星影像的檢索。 能夠在數(shù)據(jù)庫(kù)中高效、靈活地開展檢索功能,包括對(duì)衛(wèi)星影像元數(shù)據(jù)中各參數(shù)條件的組合查詢,包括基于成像時(shí)間、衛(wèi)星標(biāo)識(shí)、地理位置、分辨率等級(jí)、影像類型等查詢條件。
(3)衛(wèi)星影像的分發(fā)與應(yīng)用。 主要根據(jù)衛(wèi)星影像的檢索結(jié)果向用戶分發(fā)衛(wèi)星影像及相應(yīng)的元數(shù)據(jù),并提供讀取接口,為用戶的行業(yè)應(yīng)用提供影像基礎(chǔ)。
海量衛(wèi)星影像大數(shù)據(jù)管理系統(tǒng)的總體構(gòu)架共分為數(shù)據(jù)層、支撐層、服務(wù)層和用戶層,如圖1 所示。
圖1 海量衛(wèi)星影像大數(shù)據(jù)管理系統(tǒng)的總體構(gòu)架示意圖
其中, 數(shù)據(jù)層和支撐層是整個(gè)管理系統(tǒng)的核心,本文采用Hadoop 平臺(tái)的HDFS、MapReduce、HBase 三大核心組件構(gòu)建了總體框架中的數(shù)據(jù)層和支撐層。 其中,數(shù)據(jù)層提供多源衛(wèi)星影像數(shù)據(jù)、元數(shù)據(jù)以及其他相關(guān)信息的物理存儲(chǔ),基于HDFS 文件系統(tǒng)構(gòu)建各物理節(jié)點(diǎn),并提供大數(shù)據(jù)訪問(wèn)接口和冗余備份;支撐層的MapReduce 和HBase 通過(guò)訪問(wèn)HDFS 實(shí)現(xiàn)數(shù)據(jù)的管理和檢索,其中MapReduce 分為Map 和Reduce 兩個(gè)部分。 服務(wù)層則通過(guò)進(jìn)一步封裝,實(shí)現(xiàn)影像并行入庫(kù)、并行分塊、并行構(gòu)建金字塔等并行處理功能。
HDFS 文件系統(tǒng)能夠分布式地部署于通用、 廉價(jià)的硬件設(shè)備上,該文件系統(tǒng)為主從結(jié)構(gòu),節(jié)點(diǎn)主要包括名字節(jié)點(diǎn)(NameNode)和數(shù)據(jù)節(jié)點(diǎn)(DataNode)兩大類,如圖2 所示,其中名字節(jié)點(diǎn)用于數(shù)據(jù)的管理和調(diào)度;數(shù)據(jù)節(jié)點(diǎn)為若干個(gè),數(shù)據(jù)節(jié)點(diǎn)的一個(gè)節(jié)點(diǎn)一般對(duì)應(yīng)一臺(tái)硬件設(shè)備,每個(gè)節(jié)點(diǎn)則由若干文件分塊(Block)構(gòu)成。 在HDFS 中,文件及其冗余備份被分散為多個(gè)文件分塊,存儲(chǔ)于若干個(gè)數(shù)據(jù)節(jié)點(diǎn)中,名字節(jié)點(diǎn)負(fù)責(zé)維護(hù)文件與數(shù)據(jù)節(jié)點(diǎn)、文件分塊之間的映射關(guān)系并進(jìn)行管理和調(diào)度。 HDFS 文件系統(tǒng)的節(jié)點(diǎn)之間一般采用TCP/IP 協(xié)議進(jìn)行通信。
圖2 HDFS 文件系統(tǒng)結(jié)構(gòu)示意圖
影像分塊通過(guò)將衛(wèi)星影像在空間中進(jìn)行劃分,影分影像瓦片,以提高在任意給定空間區(qū)域中進(jìn)行影像組織和檢索的效率,也是構(gòu)建影像金字塔的基礎(chǔ)。 根據(jù)實(shí)際存儲(chǔ)設(shè)備IO 性能和網(wǎng)絡(luò)性能, 影像瓦片的大小一般為256×256 像素或128×128 像素。 影像金字塔通過(guò)預(yù)先將影像瓦片處理成不同分辨率等級(jí),以提高衛(wèi)星影像在不同分辨率等級(jí)的組織和檢索效率,是典型的采用空間換時(shí)間的策略。 金字塔模型中的低分辨率影像瓦片可通過(guò)隔行抽取等重采樣的方式得到。
在構(gòu)建影像金字塔時(shí),本文采用MapReduce 進(jìn)行并行重采樣來(lái)構(gòu)建高層級(jí),流程如圖3 所示。 首先對(duì)高分辨率的影像瓦片進(jìn)行分組,分組的數(shù)量決定了并行處理的線程數(shù);其次將每組影像瓦片分配至Map 的各節(jié)點(diǎn),由Map 各節(jié)點(diǎn)分別進(jìn)行重采樣,形成低分辨率影像瓦片; 最后通過(guò)Reduce 對(duì)各個(gè)Map 節(jié)點(diǎn)中的重采樣結(jié)果進(jìn)行合并,形成金字塔模型中的低分辨率層級(jí)。 金字塔模型除最高分辨率層級(jí)外,都可通過(guò)該方式獲得。
圖3 基于MapReduce 的影像金字塔構(gòu)建流程示意圖
根據(jù)影像金字塔模型的空間結(jié)構(gòu),以及常用的墨卡托投影特點(diǎn),本文采用四叉樹索引的方式組織全球范圍的衛(wèi)星影像。 四叉樹索引中節(jié)點(diǎn)的每次劃分都是將空間劃分為四個(gè)范圍相同的子空間,分別對(duì)應(yīng)于四個(gè)子節(jié)點(diǎn),四叉樹的不同層級(jí)對(duì)應(yīng)影像金字塔模型的不同層級(jí),四叉樹的節(jié)點(diǎn)對(duì)應(yīng)金字塔模型中的一個(gè)分塊,如圖4 所示,其中四叉樹的葉子節(jié)點(diǎn)代表金字塔模型中的最高分辨影像瓦片。
圖4 金字塔模型與四叉樹索引關(guān)系示意圖
將四叉樹索引及其對(duì)應(yīng)的影像瓦片存儲(chǔ)到HBase數(shù)據(jù)庫(kù)時(shí),四叉樹索引各層級(jí)內(nèi)每個(gè)節(jié)點(diǎn)對(duì)應(yīng)一個(gè)行列號(hào)編碼,該編碼可通過(guò)下式得到。
其中,X和Y分別為對(duì)應(yīng)四叉樹節(jié)點(diǎn)的行號(hào)、列號(hào),X和Y分別為對(duì)應(yīng)四叉樹節(jié)點(diǎn)左上角對(duì)應(yīng)的經(jīng)度和緯度,為每個(gè)影像瓦片邊長(zhǎng)的經(jīng)緯度度數(shù),roundup 為向上取整。
四叉樹索引及其對(duì)應(yīng)影像瓦片的并行入庫(kù)流程如圖5 所示。 首先基于四叉樹索引組織的影像瓦片及其編碼導(dǎo)入HDFS 文件系統(tǒng),然后將影像分塊按照四叉樹結(jié)構(gòu)進(jìn)行分組,每組影像分塊分配至Map 的各節(jié)點(diǎn),再通過(guò)Map 的各節(jié)點(diǎn)將存儲(chǔ)于HDFS 中的各組影像瓦片導(dǎo)入HBase 的HRegion 中,存儲(chǔ)時(shí)影像分塊以其分辨率等級(jí)和行列號(hào)命名,實(shí)現(xiàn)基于HBase 的影像的組織與存儲(chǔ)。 上述影像入庫(kù)流程中,文件的入庫(kù)操作由各個(gè)Map 節(jié)點(diǎn)并行完成, 影像塊分組之間、Map節(jié)點(diǎn)之間以及HRegin 之間沒有影像數(shù)據(jù)交換, 入庫(kù)的效率與單線程入庫(kù)相比大大提高。
圖5 衛(wèi)星影像并行入庫(kù)流程示意圖
影像的讀取是對(duì)外發(fā)布的關(guān)鍵。 由于本文將影像瓦片以其所在分辨率等級(jí)和行列號(hào)命名,因此用戶在讀取衛(wèi)星影像時(shí),可通過(guò)直接給出所需衛(wèi)星影像的分辨率等級(jí)和位置即可定位所需的影像分塊。
讀取時(shí), 首先用戶給向HBase 請(qǐng)求影像分塊數(shù)據(jù),請(qǐng)求時(shí)提供影像分塊的分辨率等級(jí)和地理位置等參數(shù); 其次根據(jù)本文第3.3 節(jié)中的方法將地理位置解析為行列號(hào),HBase 根據(jù)分辨率等級(jí)和行列號(hào)進(jìn)行檢索,并調(diào)用HDFS 文件系統(tǒng)接口,對(duì)指定的影像瓦片數(shù)據(jù)進(jìn)行讀取;最后,將讀取的影像瓦片按照其行列位置關(guān)系合并,形成完整的衛(wèi)星影像反饋給用戶。 讀取流程如圖6 所示。
圖6 衛(wèi)星影像讀取流程示意圖
基于本文提出的影像大數(shù)據(jù)管理特點(diǎn)與需求以及系統(tǒng)總體構(gòu)架, 采用Hadoop 平臺(tái)開發(fā)了衛(wèi)星影像大數(shù)據(jù)管理系統(tǒng)。 在Linux 操作系統(tǒng)中使用采用Java和C++語(yǔ)言進(jìn)行開發(fā),Hadoop 采用2.10.1 版本,HDFS文件系統(tǒng)構(gòu)建了1 個(gè)名字節(jié)點(diǎn)和4 個(gè)數(shù)據(jù)節(jié)點(diǎn),并在此基礎(chǔ)上實(shí)現(xiàn)了衛(wèi)星影像的分塊與入庫(kù)、影像檢索和讀取、影像瀏覽等功能,能夠獲得較高的衛(wèi)星影像管理效率。
本文通過(guò)研究基于Hadoop 的文件系統(tǒng)、 影像分塊與金字塔模型、影像索引與入庫(kù)、影像讀取等方面的關(guān)鍵技術(shù), 設(shè)計(jì)并實(shí)現(xiàn)了基于Hadoop 平臺(tái)的海量衛(wèi)星影像大數(shù)據(jù)管理系統(tǒng),為衛(wèi)星影像數(shù)據(jù)的工程應(yīng)用進(jìn)行了有益的探索。 同時(shí),如何基于Hadoop 平臺(tái)將衛(wèi)星影像處理任務(wù)分配至若干計(jì)算設(shè)備上進(jìn)行,并支持計(jì)算設(shè)備的隨機(jī)加入和退出,實(shí)現(xiàn)進(jìn)行衛(wèi)星影像的分布式處理,還值得進(jìn)一步深入研究。