李雪梅,邢俊峰,劉大偉,王海洋,2,劉瑋,2
1.煙臺中科網絡技術研究所,山東 煙臺 264003;2.中國科學院計算技術研究所,北京 100080
基于HBase的海量GIS數據分布式處理實踐
李雪梅1,邢俊峰1,劉大偉1,王海洋1,2,劉瑋1,2
1.煙臺中科網絡技術研究所,山東 煙臺 264003;2.中國科學院計算技術研究所,北京 100080
設計了一種基于分布式數據庫HBase的GIS數據管理系統。系統優(yōu)化了柵格數據的生成和存儲過程,將海量柵格數據直接寫入HBase存儲、索引。同時,針對矢量空間數據的存儲、索引與檢索,提出了一種新的rowkey設計,既考慮經緯度,又考慮空間數據類型和屬性,使得在按空間位置檢索矢量地理信息時,能通過HBase的rowkey迅速定位需要返回的數據。在H Base的集群環(huán)境上用真實GIS數據對上述方法進行了驗證,結果表明,提出的系統具有較高的海量數據存儲和檢索性能,實現了海量地理信息數據的高效存儲和實時高速檢索。
大數據;HBase;柵格數據;矢量數據;rowkey
在全球大數據蓬勃發(fā)展的大背景下,我國也緊抓發(fā)展機遇。2015年中國大數據技術大會發(fā)布了《2016年大數據技術發(fā)展趨勢》,指出:可視化推動大數據平民化、多學科融合與數據科學的興起、大數據提升社會治理和民生領域應用等將成為未來大數據的發(fā)展趨勢[1]。本文順應大數據發(fā)展趨勢,在大數據平民化、大數據民生應用等方面進行研究。
傳統地理數據處理與存儲主要使用Oracle與PostgreSQL的擴展PostGIS等關系型數據庫,但關系型數據庫在針對海量數據的管理、高并發(fā)讀寫、難擴展、對非結構化數據處理等方面已經開始制約地理信息系統的發(fā)展。而HBase采用的基于列的存儲技術以及高可用、高可靠、高性能、可擴展的特點在處理非結構化地理柵格數據和具有離散稀疏特性地理矢量數據時有著天然的優(yōu)勢。本文已經成功地將柵格數據與地理數據中的矢量數據加載到HBase,并進行了檢索測試,其檢索響應時間可達到毫秒級。
本文的創(chuàng)新點在于當生成柵格數據時在mapnik切片的基礎上做了優(yōu)化,使柵格數據不經過磁盤直接寫入HBase,并設計了柵格數據在HBase中存儲的rowkey以及GIS(geographic information system,地理信息系統)矢量空間數據在HBase中存儲的rowkey。
2.1 GIS數據
GIS數據包括兩種最基本的組織方式:柵格數據和矢量空間數據。
柵格數據是以二維矩陣的形式表示空間地物或現象分布的數據組織方式,每個矩陣單位稱為一個柵格單元(cell),在各個柵格單元上給出相應的屬性值來表示地理實體。柵格數據有屬性明顯、定位隱含的特點。隨著數據壓縮技術和計算機性能的提高,柵格數據量大的缺點不再突出,柵格數據在地圖分析中的作用越來越明顯。柵格數據可以是數字航空照片、衛(wèi)星影像、數據圖片,甚至可以是掃描的地圖。本文所提到的柵格數據即對開放街道地圖(OpenStreetMap,OSM)進行切片獲得的柵格數據。
矢量空間數據利用點、線、面及其組合體的形式表達現實世界,具有定位明顯、屬性隱含的特點。同時,矢量空間數據具有數據結構緊湊、冗余度低、表達精度高、圖形顯示質量好、有利于索引和檢索分析等優(yōu)點,在GIS中得到廣泛的應用,特別在小區(qū)域(大比例尺)制圖中充分體現了其精度高的優(yōu)點。本文所提到的矢量數據是指由政府提供的路網數據、管網數據、農村地塊數據及部分城市的天地圖矢量空間數據。
2.2 HBase
HBase是一個基于分布式的、面向列的、可伸縮的、主要用于非結構化數據存儲用途的開源數據庫。HBase是Google Bigtable[2]的開源實現。其中,Hadoop[3]HDFS為HBase提供文件存儲功能;MapReduce為其提供海量數據計算能力;ZooKeeper為其提供協調服務;Pig和Hive為其提供高層語言支持,使其可以進行數據統計;Sqoop為其提供RDBMS數據導入功能。ETL工具也能為其提供高速的數據導入/導出功能。
HBase支持按照主鍵rowkey和主鍵的range查詢,可以通過HBase提供的API(application programming interface,應用程序編程接口)進行條件過濾查詢,也可以通過編寫MapReduce程序,實現表數據的訪問和分析。HBase有如下特點:
● 對于數據類型,HBase可以存儲動態(tài)、靈活的數據模型,并不限制存儲數據的種類,可以存儲結構化、半結構化和非結構化數據;
● HBase不使用SQL語言,也不強調數據之間的關系;
● 存儲靈活,可以在一行的某一列存儲一個整數,而在另一行的同一列存儲字符串,對于空的列不占用存儲空間,適合存儲稀疏數據;
● 在集群上運行,可存儲海量數據。
傳統的GIS數據存儲大多是關系型數據庫,但關系型數據庫在海量數據的管理中面臨許多問題,包括高并發(fā)讀寫、難擴展等,已經成為制約GIS發(fā)展的瓶頸。同時,GIS數據中的圖片、影像數據等都是非結構化的,關系型數據庫不能合理地處理非結構化數據。而HBase以其高可靠性、高擴展性、高容錯性、高效性以及適用于海量非結構化數據存儲處理分析的優(yōu)勢在處理GIS數據方面提供了另一種思路,即解決HBase應對GIS中的兩大挑戰(zhàn):大規(guī)模數據處理的時延和空間位置建模[4]。
3.1 柵格數據
3.1.1 柵格數據獲取
本文柵格數據獲取、寫入流程如圖1所示。
傳統的柵格數據的存儲方式主要有兩種:以文件目錄的形式存儲和存儲在傳統數據庫中。
若柵格數據以文件目錄形式存儲,其目錄結構為zoom_level/x_coordinate/y_ coordinate.png。圖2展示的是對北京市切片獲得的第9層柵格數據。
圖2 柵格數據存儲形式和目錄結構
如果柵格數據以文件目錄形式存儲在本地磁盤,對大范圍地圖切片會產生海量柵格數據。在生成柵格數據時速率逐步降低,影響切片性能。本文對切片腳本做了修改,略去文件寫磁盤步驟,將柵格數據文件進行base64轉碼后直接存至HBase。
如果海量柵格數據存儲在傳統數據庫(如MySQL、Oracle等),主鍵和索引問題會導致讀寫速度越來越慢,并且存儲量有所限制。
基于以上原因,結合HBase在大數據存儲方面的優(yōu)勢,本文研究了柵格數據在HBase上的存儲和索引,在HBase的集群環(huán)境上對柵格數據進行了驗證,該方法具有較高的存儲能力和檢索能力。
圖3 柵格數據存儲方式
圖4 柵格數據展示
3.1.2 柵格數據的索引
如上所述,層級編碼、X坐標與Y坐標表示的不僅是一個瓦片數據的索引,同時還是瓦片數據的地理位置標志,通過數學公式在查詢和檢索時,行列編碼和經緯度之間可以實現相互轉換。本文中柵格數據存于HBase,rowkey的表示方式為zoom_ level、x_coordinate、y_coordinate,列簇(column family)為i,列(column)為png_info。柵格數據在系統中的展示形式如圖3、圖4所示。
3.1.3 柵格數據的檢索
柵格數據的檢索主要是返回指定區(qū)域的所有柵格信息,以編排好的一張地圖的形式返回。柵格數據的索引方式使得需要先確定X、Y坐標的范圍,再在返回的結果上進行篩選,編排出符合條件的所有切片合成一張地圖。本文柵格數據的檢索是以服務形式提供,若檢索第9層,X坐標為421,Y坐標為194的柵格數據如圖5所示。
在柵格數據服務上,通過OpenLayers可將柵格數據以地圖的形式返回。圖6展示的是切片數據第12層拼接的地圖。
3.2 矢量空間數據
矢量空間數據的組織形式比柵格數據復雜得多,不僅有點(point)、線(line string)、面(polygon)、多點(multipoint)、多線(multi-line string)、多面(multi-polygon)等不同的矢量空間數據格式以及圖層和復雜的拓撲關系信息[5,6]。為了使用HBase方便、高效地管理矢量空間數據,并且使地理位置相鄰的空間對象盡可能地在邏輯存儲上也相鄰,需要設計出合理的rowkey來提高檢索效率。
3.2.1 矢量空間數據的索引
無論是點、線、面等何種矢量空間數據格式,都是由一個個二維(經度和緯度)的點組成,其中,點的表示為(x,y);線的表示為(x1,y1),(x2,y2),…,(xn,yn);面的表示為(x1,y1),(x2,y2),…,(x1,y1)。不同于一維數據可以通過排序方式創(chuàng)建索引,在檢索時可考慮二分查找法進行快速查找。在對矢量空間數據進行存儲時主要考慮如何將二維數據轉換成一維數據,進而作為HBase的rowkey索引與檢索。
二維或多維空間坐標降維至一維字符串的方法有很多,如Hilbert空間降維法[7-9],該方法能夠通過數學模型最大限度地保證空間對象之間的邏輯相關性,無較大突變;缺點是數學模型較復雜,降維過程中運算量較大。四叉樹[10]也是一種有效的空間降維方法,四叉樹其實是一種字典樹,因為樹節(jié)點的值不依賴于插入的數據,在進行數據降維時需要先建好樹,再將需要降維的數據劃分到適當的區(qū)間即可,但算法相對復雜。本文使用Geohash①http://en.wikipedia.eohash方法降維。
圖5 切片服務
圖6 柵格數據拼接地圖
Geohash即將一個經緯度信息轉換成一個既可以排序又可以比較的字符串編碼。具體操作步驟如下。
步驟1將緯度范圍(-90,90)平分成兩個區(qū)間(-90,0)、(0,90),如果目標緯度位于前一個區(qū)間,則編碼為0,否則編碼為1。
步驟2若步驟1編碼為0,將緯度范圍(-90,0)平分成兩個區(qū)間(-90,-45)、(-45,0),如果目標緯度位于前一個區(qū)間,則編碼為0,否則編碼為1。
步驟3若步驟1編碼為1,同步驟2,將緯度范圍(0,90)平均分區(qū)。
步驟4依據步驟2和步驟3對緯度進行劃分,直到精度符合要求為止,得到緯度編碼。
步驟5經度編碼同緯度算法,對(-180, 180)依次細分,直到精度符合要求為止,得到經度編碼。
步驟6將經度和緯度的編碼合并,奇數位是緯度,偶數位是精度。
步驟7對步驟6合并的編碼進行base 32編碼。
為了使得Geohash具有可比性[11],在進行base32編碼時需參考字符在ASCⅡ碼表的順序。用0~9、b~z(去掉a,i,l,o)32個字符進行base32編碼,具體的碼表見表1。
例如,緯度為39.92324°的編碼是1011 1000 1100 0111 1001,經度為116.390 6°的編碼為1101 0010 1100 0100 0100,經緯度合并編碼為11100 11101 00100 01111 00000 01101 01011 00001,base32轉碼后編碼為wx4g0ec1。資料顯示base32編碼長度為8時,精度在19 m左右,具體的編碼長度需要根據數據情況進行選擇,為了既可以定位到某個位置,又保護隱私性,并且考慮到HBase的rowkey選擇遵循越短越好的原則,本文規(guī)定base32的長度最長為8。
對經緯度進行Geohash降維后,不僅大大縮短了rowkey的長度,對大部分而言,編碼相似的距離也相近,見表2實際編碼實例中的前兩行。但該算法的缺點是有數據突變,有些Geohash值相差很遠,但實際位置很近,如圖7中的WX4G08和WX4FBX。解決這一問題可使用擴大返回結果的方式,如在查詢時,除了返回與Geohash值匹配的區(qū)域,同時返回其周圍的8個區(qū)域。
針對在HBase上的多條件查詢,一般是將所有可能作為查詢條件的字段一一拼接到rowkey中,這種拼接的rowkey使得在查詢時排序越靠前的字段越有優(yōu)勢。為了提高空間查詢的效率,本文除了考慮經緯度信息,又要考慮空間數據組織形式和圖層屬性,為了保證線和其經過的區(qū)域以及面和其包含的區(qū)域表達出來,需要在rowkey上拼接網格ID。本文的rowkey拼接順序為:表名;空間數據類型;經緯度Geohash編碼;網格ID,如:line;L;wx51053b;102203822。列的設計即將源數據表中所有的列信息一一寫入HBase,為了加快檢索速率,添加一列圖層屬性信息。
空間數據類型可在源數據中獲取,在第3.2節(jié)介紹了空間數據組織形式有6種,為了遵循rowkey的越短越好原則②http://hbase.apache.org/0.94/ book/rowkey.design.html# keysize,將組織形式進行了映射,見表2。
若將線或面上的標記點及整條線或整個面的信息一一寫入HBase,當要展示某個區(qū)域的地理信息時,若一條線穿過這個區(qū)域,但線上的標記點都沒落在該區(qū)域,那么這條線就不能正常地顯示出來,如圖8所示。同理,若一個面的邊界在這個區(qū)域之外,面上的標記點也都沒落在該區(qū)域,也會出現面不能正常顯示的問題,如圖9所示。網格ID的設計是為了解決該類問題。
表1 base32碼表
對于網格ID設計的步驟如下。
步驟1獲取數據庫對象的邊界。
步驟2對步驟1的邊界進行四叉樹劃分,直至預先設定的地理位置精度。本文規(guī)定劃分后的每個單元格使用6位base32表示即可。
步驟3將每個單元格的經緯度信息轉換成Google的900913類型幾何值。
步驟4在將GIS數據寫入HBase前與單元格幾何值進行相交,得到每條記錄與網格相交的信息。
步驟5對于線數據表或面數據表中的每一條記錄,除了本身的信息(標記點及整條線或整個面的信息)之外,相交信息也需一同寫入HBase相應數據庫。
3.2.2 矢量空間數據的檢索
對矢量空間數據的檢索主要有以下3種。
● 返回指定區(qū)域的點、線、面等信息,該種情況需要遍歷rowkey的前綴為:表名;空間數據類型的各種情況,返回base32值小于或等于指定區(qū)域的所有數據。
● 返回整條線或整個面的信息,該種情況只需指定rowkey的前綴,返回整條線或整個面的邊界信息。
● 返回指定圖層的信息,該種情況若直接通過檢索rowkey的方式獲取需要遍歷的整個HBase表,為了加快該種情況的檢索速度,本文在列的設計方面增加了一項fliter,用來存儲從矢量信息中獲取的圖層信息。檢索時只需返回指定列信息即可。
表2 空間數據組織形式映射
圖7 編碼實例
圖8 線穿過區(qū)域
圖9 面包含區(qū)域
4.1 實驗環(huán)境
本文的實驗環(huán)境為3臺服務器搭建的集群環(huán)境。服務器的相關配置見表3。
表3 服務器配置
4.2 柵格數據寫HBase
本文在柵格數據切片及寫HBase上主要是略去了磁盤寫步驟,默認的柵格數據獲取是以文件形式存儲在本地磁盤,再通過讀磁盤文件寫入HBase。對北京市分別切片至16層、18層,并將柵格數據寫入HBase測試結果,見表4。
從表4可以看出,改進后略去磁盤寫操作,在柵格數據量較少時性能反而下降。但在處理數據規(guī)模較大(如對中國地圖或世界地圖進行切片)時,會因持續(xù)寫磁盤操作,生成文件夾及切片文件數太多導致inode(索引節(jié)點)耗盡。經過約24 h的持續(xù)切片,生成海量切片小文件,導致服務器inode用盡,即使硬盤空間仍有空余,也無法在硬盤上創(chuàng)建新文件,進而切片工作無法正常完成。
若將切片直接寫入傳統數據庫(如MySQL、Oracle、PostgreSQL等),寫入速度不斷降低,導致寫入時間不可接受,后期的檢索時間也較慢。另外,海量切片小文件寫入傳統數據庫會對數據庫造成較高的負載,系統的穩(wěn)定性和擴展性難以控制。
經過改進測試,對世界地圖連續(xù)切片一個月,形成83 GB的柵格數據,未經過磁盤寫操作直接寫入HBase,未出現任何異常情況。
本文對柵格數據的檢索也進行了驗證,在124217416條記錄的HBase表上檢索指定切片的響應時間為毫秒級(0.004 s)。同時,HBase也支持指定范圍檢索,一次返回萬級別切片的響應時間為秒級(5.077 s)。
表4 柵格數據寫HBase
4.3 矢量空間數據寫HBase
為了對海量矢量空間數據進行高效存儲、管理與檢索,本文設計了矢量空間數據的rowkey,并將數據存儲于HBase。實驗結果顯示,對中國地圖的矢量空間數據在24 201 991條記錄的Hbase表上檢索指定空間矢量點的響應時間為毫秒級(0.021 s)。檢索線或面的響應時間為秒級,若返回一個面上的千級別的坐標點時間約為3.551 s。
本文針對智慧城市建設中的數據管理問題,利用HBase分布式數據庫的列存儲模型特點,設計了一種基于HBase的GIS數據管理系統,實現了對矢量空間數據與柵格數據的高效存儲、索引與檢索。GIS矢量空間數據在HBase中存儲,首先確定rowkey的設計,使得在檢索空間位置時返回盡可能少的數據請求,即在檢索時既考慮經度與緯度,又考慮空間數據類型和圖層屬性。設計了基于表名、空間數據類型、經緯度Geohash編碼、網格ID的rowkey方法。為了加快切片效率和減少存儲成本,本文在生成柵格數據時在mapnik切片的基礎上做了優(yōu)化,使柵格數據不經過磁盤寫操作,直接寫入HBase。設計了柵格數據在HBase中存儲的rowkey。最后,在HBase的集群環(huán)境上對上述方法進行了驗證。實驗表明,本文提出的方法具有較好的可行性和執(zhí)行效率。
[1] 潘柱延, 程學旗, 袁曉如, 等.CCF大專委2016年大數據發(fā)展趨勢預測——解讀和行動建議[J].大數據, 2016, 2(1): 105-113.PAN Z Y, CHENG X Q, YUAN X R, et al.Developing trend forecasting of big data in 2016 from CCF TFBD: interpretation and proposals [J].Big Data Research, 2016, 2(1): 105-113.
[2] CHANG F, DEAN J, GHEMAWA S, et al.Bigyable: a distributed storage system for structured data[C]//The 7th USENIX Symposium on Operating Systems Design and Implementation, November 6-8, 2006, Seattle, WA, USA.New York: ACM Press, 2006: 205-218.
[3] 陳嘉恒.Hadoop實戰(zhàn)[M].北京: 機械工業(yè)出版社, 2011: 1-2, 260-261.CHEN J H.Hadoop in action[M].Beijing: China Machine Press, 2011: 1-2, 260-261.
[4] 陳崇成, 林劍峰, 吳小竹, 等.基于NoSQL的海量空間數據云存儲與服務方法[J].地球信息科學學報, 2013, 15(2): 166-174.CHEN C C, LIN J F, WU X Z, et al.Massive geo-spatial data cloud storage and services based on NoSQL database technique[J].Journal of Geo-Information Science, 2013, 15(2): 166-174.
[5] 范建永, 龍明, 熊偉.基于HBase的矢量空間數據分布式存儲研究[J].地理信息與地理信息科學, 2012, 28(5): 39-42.FAN J L, LONG M, XIONG W.Research of vector spatial data distributed storage based on HBase[J].Geography and Geo-Information Science, 2012, 28(5): 39-42.
[6] 張葉, 許國艷, 花青.基于HBase的矢量空間數據存儲與訪問優(yōu)化[J].計算機應用, 2015, 35(11): 3102-3105.ZHANG Y, XU G Y, HUA Q.Storage and access optimization of vector space data based on HBase[J].Journal of Computer Applications, 2015, 35(11): 3102-3105.
[7] WANG L, CHEN B, LIU Y.Distributed storage and index of vector spatial data based on HBase[C]//The 2013 21st International Conference on Geoinformatics, June 20-22, 2013, Kaifeng, China.New Jersey: IEEE Press, 2013:1-5.
[8] 陸鋒, 周成虎.一種基于Hilbert排列編碼的GIS空間索引方法[J].計算機輔助設計與圖形學學報, 2001, 13(5): 424-429.LU F, ZHOU C H.A GIS spatial indexing approach based on Hilbert ordering code[J].Journal of Computer-Aided Design and Computer Graphics, 2001, 13(5): 424-429.
[9] SHEKHAR S, CHAWLA S.空間數據庫[M].謝昆青, 譯.北京: 機械工業(yè)出版社, 2004: 108-113.SHEKHAR S, CHAWLA S.Spatial database[M].Translated by XIE K Q.Beijing: China Machine Press, 2004: 108-113.
[10] 滕連澤, 劉洪斌, 武偉.基于空間數據不同索引方法的比較[J].計算機與現代化, 2006(1): 60-62.TENG L Z, LIU H B, WU W.Comparison of indexes based on spatial data[J].Computer and Modernization, 2006(1): 60-62.
[11] HSU Y T, PAN Y C, WEI L, et al.Key formulation schemes for spatial index in cloud data managements[C]// The 2012 IEEE 13th International Conference on Mobile Data Management, July 23-26, 2012, Bengaluru, India.New Jersey: IEEE Press, 2012: 21-26.
作者簡介
李雪梅(1984-),女,煙臺中科網絡技術研究所研發(fā)工程師,主要研究方向為數據挖掘與分析、自然語言處理、大數據存儲管理與挖掘等。
邢俊峰(1985-),男,煙臺中科網絡技術研究所研發(fā)工程師,主要研究方向為數據存儲檢索和展現等。
劉大偉(1984-),男,博士,煙臺中科網絡技術研究所助理研究員,主要研究方向為海量數據檢索、多媒體內容分析、社交網絡分析等。
王海洋(1980-),男,中國科學院計算技術研究所網絡數據科學與技術重點實驗室、煙臺中科網絡技術研究所工程師,主要研究方向為數據采集、存儲、檢索、大數據存儲管理等。
劉瑋(1977-),男,中國科學院計算技術研究所網絡數據中心、煙臺中科網絡技術研究所工程師。歷任中國科學院計算技術研究所項目負責人,北京中科天璣信息技術有限公司總經理助理,北京中科智源育成信息技術有限公司事業(yè)部經理。以項目負責人或核心骨干成員承擔和參與了國家信息關防與網絡安全保障持續(xù)發(fā)展計劃、國家信息安全專項、國家242信息安全計劃、發(fā)展和改革委員會產業(yè)化項目等10余項國家重大項目的組織實施。
Distributed processing practice of the massive GIS data based on HBase
LI Xuemei1, XING Junfeng1, LIU Dawei1, WANG Haiyang1,2, LIU Wei1,2
1.Institute of Network Technology, ICT(YANTAI), Yantai 264003, China
2.Institute of Computing Technology, Chinese Academy of Sciences, Beijing 100080, China
Based on the distributed database HBase, a kind of GIS data management system was designed.The system optimized the generated and stored procedures of raster data, which could be directly written into the storage and indexing of the HBase.At the same time, in view of the storing, indexing and retrieval of the vector spatial data, a new design for rowkey was proposed that considering both the latitude and longitude, and the spatial data types and attributes.So that the data needed to be returned could be quickly located by rowkey of the HBase, when retrieving vector geographic information according to the spatial location.The above methods had been verified on the HBase cluster environment with real GIS data.The results show that the proposed system has high performance for storage and retrieval of mass data, and realizes the efficient storage and real-time high-speed retrieval of the vast geographic information data.
big data, HBase, raster data, vector data, rowkey
TP301
A
10.11959/j.issn.2096-0271.2016032
2016-03-07
山東省自主創(chuàng)新及成果轉化專項基金資助項目(No.2014XGA06014);山東省科技發(fā)展計劃基金資助項目(No.2015GGX106001);煙臺市科技發(fā)展計劃基金資助項目(No.2014LGS005)
Foundation Items: Technology Innovation Program of Shandong Province of China (No.2014XGA06014), Shandong Technology Research and Development Program (No.2015GGX106001), Yantai Technology Research and Development Program (No.2014LGS005)