?

基于Hadoop的遙感影像業務管理系統設計①

2018-11-14 11:36王敬平
計算機系統應用 2018年11期
關鍵詞:聚類節點模塊

張 揚,謝 彬,王敬平,唐 鵬

(華東計算技術研究所,上海 201808)

1 問題分析

遙感影像作為一種特殊的數字圖像,具有高分辨率,高覆蓋范圍,信息量大等特點.在環境監測,資源探測,災害防護,城市規劃,軍事行動等方面具有極高的應用價值[1].

陜西某測繪所近些年一直使用單機文件系統如NTFS,進行遙感影像數據存儲.隨著影像數據不斷積累,數據規模達到海量級別,傳統解決方案不能滿足海量存儲需求,同時擴展性很差,不支持多用戶數據共享.與此同時,科研人員在進行業務處理時,發現影像讀取速度緩慢,進行影像聚類處理時,等待周期較長.

針對以上問題,本文基于Hadoop和三級緩存技術,設計了一套遙感影像業務管理系統,提供影像存儲,算法注冊,分布式計算的功能.系統測試結果表明,影像讀取速度提升2倍以上,計算處理時間縮短三分之一以上.

本文將介紹以下內容: 第2節介紹相關研究狀況,第3節是遙感影像管理系統架構設計,第4節介紹四個核心模塊的實現原理,第5節給出系統測試方法和結果.

2 相關研究狀況

關于如何存儲和管理遙感影像數據,國內外學者和商業技術公司都進行了很多相關的研究.這些研究內容主要分為以下三種方式:

1) 采用傳統文件系統,如NTFS,EXT,FAT,HFS等.首先將影像數據瓦片化,之后將瓦片數據根據空間位置信息,按照特定的目錄結構進行存儲.這種方式成本低廉,使用簡單,但是容錯性和擴展性差,不支持多用戶數據共享,并發操作等.

2) 采取關系型數據庫(RDBMS),如MySQL,Oracle等.首先將影像數據進行分塊,之后將數據塊轉化成二進制大對象(Binary Large Object),進行入庫管理.這種方式查詢方式簡單,支持多用戶數據共享.但是關系型數據庫對大對象(Blob)存取效率不高.其次,單個Blob對象一般最大支持4 GB的大小,限制了影像數據塊規模.

3) 采用集中式文件系統,如ArcGIS Image Server等.這種方式技術成熟,易于維護.但是這種方式的擴展性較差,同時隨著用戶規模的增加,中央服務器很容易達到性能瓶頸.

本文采用HDFS分布式存儲策略,將系統構建在廉價的PC機之上,具有高度的容錯性,可擴展性,易于維護的特點[2,3].同時基于LFU緩存算法,設計了三級緩存模塊,用來高速緩存影像數據.兩種方式相互結合,前者解決海量存儲的需求,后者實現影像數據的快速讀取.

除此之外,關于如何處理影像數據,傳統的解決方案是將處理算法運行在單一PC機之上.但是很多影像處理算法如K均值、ISODATA等,可以結合Map-Reduce這種分布式處理框架進行改進[4–7].本文設計了算法注冊和處理模塊,支持單機處理和MapReduce分布式處理兩種運行模式.

3 系統架構

如圖1所示,系統采用B/S架構設計,為用戶提供友好的Web客戶端.方便用戶進行影像導入,計算處理等操作.

圖1 系統架構設計

整套系統分為四個核心模塊,分別是三級緩存模塊,HDFS讀寫模塊,算法注冊模塊以及計算處理模塊.滿足軟件設計高內聚,低耦合的標準,每個模塊功能如下:

1) 三級緩存模塊: 緩存影像數據塊和計算處理模塊產生的臨時數據,加速讀取速度.

2) HDFS讀寫模塊: 構建HDFS集群,對外提供讀寫接口.滿足遙感影像海量存儲和多用戶共享數據的需求.

3) 算法注冊模塊: 獲取算法元數據信息,導入MySQL數據庫持久化.

4) 計算處理模塊: 根據算法元數據,開啟單機處理模式或者MapReduce分布式模式.

影像數據寫入時,首先瀏覽器客戶端與三級緩存模塊和HDFS讀寫模塊交互,確定寫入路徑.之后將影像數據從本地同時寫入三級緩存模塊和HDFS集群.最后客戶端端接收到成功寫入信號,關閉寫入工作流.否則,重新發起寫工作.

影像數據讀取時,瀏覽器客戶端首先與三級緩存模塊交互,查找影像數據.如果查找成功結束讀取工作,否則繼續與HDFS底層存儲模塊交互,查找數據塊.

算法注冊時,瀏覽器客戶端將算法包元數據寫入MySQL,算法包同時寫入三級緩存模塊和HDFS集群.算法運行時,根據算法元數據,開啟對應算法運行模式.

4 模塊原理和實現

4.1 三級緩存模塊

三級緩存模塊在系統中功能為以下兩點: (1) 緩存影像數據,提高影像讀取速率.(2) 緩存影像處理過程中產生的臨時數據,減少影像處理時間.

根據上述設計目標,本模塊架構設計采用主從設計思想,共分為四個部分: Master、Salve、Client以及切割預處理.如圖2所示.

圖2 三級緩存模塊架構

當影像文件寫入Salve節點之前,先對文件進行切割預處理,將影像切割成很多128 MB大小相同的數據塊,不足128 MB的數據按實際大小成塊.例如一個500 MB的影像文件,會切割成三個128 MB和一個116 MB大小的數據塊.

Master負責影像文件元數據管理.元數據采用Inode Tree形式,每個影像文件都是一個Inode.每個Inode記錄著: 文件對應的數據塊id、名稱、大小,存儲節點位置等信息.同時維護一張Mount表,記錄每個文件三級緩存系統路徑與HDFS文件路徑的映射關系.例如三級緩存系統根路徑”/”對應“hdfs://master:9000/ThreeCache/”.方便影像文件在三級緩存系統和HDFS集群中的映射管理.

Salve負責存儲影像數據塊,管理本地MEM(內存)、SSD(固態硬盤)和HDD(硬盤),三種硬件設備構成三層緩存結構,其讀寫速度依次遞減.每個數據塊根據LFU (Least Frequently Used)算法緩存機制,計算出熱度值.數據塊根據熱度值,依次遞減排列,緩存到MEM、SSD、HDD中.

如圖3所示,在LFU算法中[8],每個數據塊歷史訪問次數越多,熱度值就越高.核心思想是根據歷史訪問頻率來判定未來訪問頻率.同一影像文件對應的所有數據塊具有相同的熱度值.

圖3 LFU緩存機制算法

算法1.LFU算法1.新加入數據塊,放到緩存隊列末尾.初始熱度值為1.2.緩存隊列中數據塊每被訪問一次,熱度值增加1.3.隊列重新排序,熱度值依次遞減.熱度值相同的數據塊,最近訪問時間靠后的,排在前面.4.緩存隊列滿時,加入新的數據塊,淘汰隊列末尾數據塊到低層次存儲結構.5.低層次存儲結構重復步驟1、2、3、4.6.三級存儲結構滿時,淘汰數據塊.

Client作為客戶端,負責向外提供文件寫入和讀取的訪問接口.當發生影像文件讀取時,三級緩存模塊工作流程如下:

1) Client接收到影像文件讀取請求,發送信息給Master,返回對應數據塊位置信息.

2) 根據塊位置信息,在Salve中查找.如果命中數據塊,就合并數據塊成文件發送給對話發起模塊,之后Client結束對話.

3) 如果沒有命中數據塊,則說明數據塊被淘汰,返回失敗信息給Client.

4) Client當接收到返回的失敗信息后,返回查找失敗信息給對話發起模塊,結束對話.

如果三級緩存系統中沒有影像文件,只能向HDFS發起RPC請求,讀取數據.同時該影像文件重新加載到三級緩存系統,更新熱度值.重新排列緩存系統中數據塊位置.

4.2 HDFS讀寫模塊

HDFS讀寫模塊與三級緩存模塊都具有影像數據存儲功能.但該模塊功能在系統中作用是滿足影像數據的海量存儲需求.

實現方案是構造UploadFile,DownloadFile方法,方法中調用Hadoop提供fileSystem類getFileStatus,copyFromLocalFile,open,delete相關方法.如圖4所示,當影像文件寫入時,該模塊工作流程如下:

1) Web前端獲取影像名稱,初始路徑,目標路徑.發送寫入請求給HDFS讀寫模塊.

2) HDFS讀寫模塊接收寫入請求后,調用UploadFile方法獲取初始路徑,和目標路徑,寫入configuration.再調用HDFS的copyFromLocalFile接口.

3) HDFS集群調用DistributedFileSystem對象,的create方法,返回FSDataOutputStream對象,創建一個文件輸出流.

4) 調用DistributedFileSystem對象,與Name-Node進行RPC調用,在分布式文件系統創建目標路徑.

5) 調用FSDataOutputStream對象,向DataNode開始發起寫入請求.原始影像被分割成大小為64k的packet,包含校驗碼等發送出去.

6) DataNode與其他DataNode(副本放置)組成Pipeline依次傳輸Packet,寫入成功后,返回寫入ack信息.

7) DataNode全部寫入成功后FSDataOutput-Stream調用close方法,關閉字節流.讀寫模塊檢測到寫入成功后,發送信號給Web后端,結束整個寫入任務.

圖4 影像導入界面

UploadlFile關鍵代碼如下:

4.3 算法注冊管理模塊

如圖5所示,算法注冊模塊提供影像處理算法包注冊和管理的功能.由于MySQL數據庫適合存儲結構化數據,同時千萬級別以下查詢響應延遲低,所以將算法的名稱、算法類型、算法包路徑等元數據信息,保存在MySQL數據庫進行持久化.算法包的數據量不適合使用MySQL,將分別寫入三級緩存模塊和HDFS模塊.

圖5 算法注冊界面

主要工作流程如下:

1) 用戶在瀏覽器端,填寫算法名稱,算法版本,算法簡介,從本地文件系統選擇要注冊的算法包.

2) 注冊保存后,后端將算法元數據信息發送給MySQL數據庫,

3) 算法包信息同時發送給三級緩存模塊和HDFS模塊,進行寫入操作.

4) 使用算法包時候,查詢MySQL數據庫表,得到算法包路徑信息.

5) 根據算法路徑信息,先向三級緩存模塊查找,如果查找失敗,最后調用HDFS的Java接口查找.

數據庫表設計結構如表1.

表1 算法注冊表結構

4.4 計算處理模塊

計算處理模塊提供影像處理的功能,支持單機和分布式處理兩種模式.算法表結構中Is_MapReduce字段,決定該算法的處理模式.

單機處理模式跟傳統ENVI,IMAGINE等軟件計算處理方式相同,往往耗時較長.由于很多影像處理算法可以結合MapReduce進行改進,例如K均值,ISODATA[9–11].只要實現 Map 和 Reduce 兩個函數,就可以采用分布式處理模式,如算法2.

算法2.改進后的K均值算法1.在Main函數中,讀取初始n個中心位置,保存到Configuration對象中.2.重寫Map函數,讀取遙感信息圖像,計算每個像素點到n個中心位置的歐式距離,距離最短的則為該像素點所屬的聚類中心,輸出<聚類中心id,對應像素點>.3.Shuffle過程: 不同聚類中心,經過哈希后,哈希值相同的,傳給同一個Reduce節點.4.重寫Reduce函數,每個聚類中心點,根據對應的所有像素點,計算均值.得到新的聚類中心點,輸出<聚類中心id,新的聚類中心id>.5.計算新的聚類中心和之前聚類中心的距離,如果小于設定閾值,輸出結果.否則,新的聚類中心id,寫入Configuration中,跳轉到步驟2.

基于上述算法,該模塊工作流程如下:

1) 計算模塊接收到算法包元信息,根據 Is_Map Reduce值,若為真,開啟分布式處理模式.

2) 解析算法包信息,開啟多個Map任務,產生的新的鍵值對寫入本地三級緩存系統,進行分區.

3) 新的鍵值對,按照分區序號通過Shuffle過程,發送給不同Reduce節點.

4) 不同Reduce節點,按照算法包實現的Reduce函數,產生新的鍵值對,寫入三級緩存系統,輸出結果.

5 系統性能測試

5.1 硬件環境

由6臺普通PC機,千兆網卡,千兆交換機組成服務集群.一個作為NameNode主節點或三級緩存模塊的Client和Master,其它作為DataNode或三級緩存的salve節點.其中主節點裝載MySQL數據庫,版本為5.7.20.節點配置如表2.

表2 集群軟件及硬件配置

5.2 影像讀取速度測試

測試條件采用145張TIFF格式的影像數據,單幅大小約為178 MB,總容量為25.81 GB.Hadoop配置文件hdfs-site.xml參數設定如下:

--塊大小128 M

--副本數量為3

先直接使用HDFS hadoop fs-get命令,進行讀取測試.再測試加入三級緩存模塊后的讀取速度測試.每種測試方法反復進行5次,記錄耗費時間.測試結果如圖6所示.

圖6 影像讀取速度測試

根據測試數據,計算出HDFS讀取影像耗費時間平均為466.72 s,平均讀取速度為55.30 m/s.加入三級緩存模塊后,平均耗費時間為200.06 s,平均讀取速度為129.01 m/s.實驗結果表明,三級緩存模塊可以將影像讀取速度提升2倍以上,有效解決影像數據讀取緩慢的問題.

另外注意到,三級緩存模塊第一次讀取耗費時間稍長,之后就趨于平穩.經過分析,原因是首次讀取時,很多數據塊可能位于底層次存儲結構中.再次讀取時,數據塊熱度值更新,在緩存隊列中的位置發生前移.

5.3 影像聚類處理測試

分別輸入178 MB、365 MB、712 MB、1424 MB的影像數據,模擬不同數據量對聚類時間的影響.再使用單個節點,模擬傳統單節點聚類處理過程.最后分別使用2個,3個,4個,5個計算節點,模擬不同集群性能對處理時間的影響.

算法包中Main函數,調用JobConf中setNumReduce Task方法,將Reduce數量設置和計算節點數量相等.測試結果如圖7所示.

圖7 聚類處理時間測試

根據實驗結果發現,在數據量比較小的時候,隨著節點數量增加,時間曲線下降不明顯.尤其是當數據規模只有178 MB情況下,兩個計算節點處理時間會稍許增加.這是因為開啟多節點進行聚類處理,任務切割、網絡通信時間會增加.數據規模不大情況下,反而導致整體時間開銷增加.

隨著輸入數據量的增大,可以發現時間曲線下降效果較為顯著.當達到1 GB數據規模時,時間開銷較傳統單節點處理方式,可以減少40%以上.

6 總結和展望

本文根據陜西某測繪所遇到的影像存儲需求量大,讀寫速度慢,計算時間周期長,多用戶無法共享數據等問題.基于Hadoop開源框架和LFU算法,構建了一套影像業務管理系統,提供影像存儲,算法注冊,影像處理功能.實驗結果證明,該系統有效解決了上述問題,其中三級緩存模塊顯著提升了整體系統的性能.

由于算法注冊模塊是通用模塊,同時支持基于單節點開發的算法包,以及基于MapReduce計算框架開發的算法包.之后工作,可以就ISODATA,Sobel邊緣檢測[12]等常見的遙感影像處理算法如何結合Map-Reduce框架,進行算法包的開發研究.

猜你喜歡
聚類節點模塊
一種傅里葉域海量數據高速譜聚類方法
28通道收發處理模塊設計
“選修3—3”模塊的復習備考
概念格的一種并行構造算法
結合概率路由的機會網絡自私節點檢測算法
采用貪婪啟發式的異構WSNs 部分覆蓋算法*
Crosstalk between gut microbiota and antidiabetic drug action
面向WSN的聚類頭選舉與維護協議的研究綜述
改進K均值聚類算法
基于Spark平臺的K-means聚類算法改進及并行化實現
91香蕉高清国产线观看免费-97夜夜澡人人爽人人喊a-99久久久无码国产精品9-国产亚洲日韩欧美综合