張 恩,張廣弟,蘭 磊
(1.江西理工大學(xué) 建筑與測繪工程學(xué)院,江西 贛州 341000)
當(dāng)前市場上已存在一些較成熟的分布式存儲(chǔ)軟件主要有2條弊端[1]:不能更好地支持非結(jié)構(gòu)化和半結(jié)構(gòu)化的空間數(shù)據(jù)存儲(chǔ);不能實(shí)現(xiàn)對海量數(shù)據(jù)的高效訪問和處理。因此,解決大規(guī)模數(shù)據(jù)處理的方法之一就是利用多臺(tái)普通機(jī)器架設(shè)分布式環(huán)境以進(jìn)行并行計(jì)算[2]。并行計(jì)算的主要思路是把計(jì)算任務(wù)并行化,即把整體的海量數(shù)據(jù)處理任務(wù)分發(fā)到多個(gè)服務(wù)器節(jié)點(diǎn),利用多機(jī)的計(jì)算能力,加快數(shù)據(jù)處理速度[3]。采用并行計(jì)算可滿足海量空間數(shù)據(jù)的并發(fā)訪問、處理和空間分析等需求[4]。
圖1為HMGIS的框架圖,是專門為解決海量空間數(shù)據(jù)高效存儲(chǔ)和并行處理而建立的,主要包括MongoDB 分布式集群、Hadoop集群、Master主服務(wù)器和Mongos路由兩者之間的控制和交互3個(gè)方面。
為了實(shí)現(xiàn)HMGIS數(shù)據(jù)庫管理,搭建了自己的底層數(shù)據(jù)庫平臺(tái)環(huán)境。設(shè)置了3個(gè)子節(jié)點(diǎn)、1個(gè)中心節(jié)點(diǎn)、節(jié)點(diǎn)機(jī)器為實(shí)驗(yàn)室?guī)着_(tái)配置較高的同型號筆記本,每個(gè)節(jié)點(diǎn)的硬件及操作系統(tǒng)配置均相同, 其中服務(wù)器環(huán)境為Linux 32-bits Ubuntu11.10,開發(fā)環(huán)境為Window 7,集群Hadoop的版本采用Hadoop0.20.1進(jìn)行環(huán)境架構(gòu),MongoDB數(shù)據(jù)庫版本是MongoDBLinux-i686-2.2.0。
1)由于需要跟Hadoop框架進(jìn)行配套,所以MongoDB集群的配置方案為:①3個(gè)分片sharding;②每一個(gè)分片由3個(gè)節(jié)點(diǎn)構(gòu)成(1主2備的Replica Sets);③3個(gè)配置節(jié)點(diǎn)Configsever;④1個(gè)路由節(jié)點(diǎn)Mongos,如表1所示。
表1 MongoDB集群節(jié)點(diǎn)配置情況表
2)創(chuàng)建數(shù)據(jù)目錄。創(chuàng)建日志文件目錄: /data
data/r0,data /r1,data/r2 ;
data/r0,data /r1,data/r2
data/r0,data /r1,data/ r2
data/config/r0,data/config/r1,data / config /r2
3)創(chuàng)建分片及復(fù)制集(以第1組為例,其他2組一樣)。以下是一臺(tái)節(jié)點(diǎn)分片配置情況,其服務(wù)器名為ubuntu1。
/data/db/mongodb/bin# ./mongod –shardsvr –relSet
shard1 –port 10000 -dbpath /data/r0 -oplogSize 100
–logpath /data/ r0.log –logappend –fork
/data/db/mongodb/bin# ./mongod –shardsvr –relSet
shard2 –port 10000 -dbpath /data/r0-oplogSize 100
–logpath /data/ r0.log –logappend –fork
/data/db/mongodb/bin# ./mongod –shardsvr –relSet
shard3 –port 10000 -dbpath /data/r0 -oplogSize 100
–logpath /data/r0.log –logappend -fork
4)創(chuàng)建分片后創(chuàng)建復(fù)制集。代碼如下:
./mongo --port 10000
>c o n f i g={_i d:"s e t A",m e m b e r s:[{_i d:0,host:"192.168.1.102:10000"},{_id:1,h o s t:"1 9 2.1 6 8.1.1 0 3:1 0 0 0 0"},{_i d:2,h o st:"192.168.1.104:10000"}]}
rs.initiate(config) ;
5)啟動(dòng)3個(gè)配置服務(wù)節(jié)點(diǎn)Configsvr。代碼如下:/data/db/mongodb/bin# ./monogd –configsvr –dbpath /data/configsvr/config –port 20000 –logpath /data/config.log –logappend -fork/data/db/mongodb/bin# ./monogd –configsvr –dbpath /data/configsvr/config –port 20000 –logpath /data/config.log –logappend -fork/data/db/mongodb/bin# ./monogd –configsvr –dbpath /data/configsvr/config –port 20000 –logpath /data/config.log –logappend –fork -chunkSize 50
6)在Master上啟動(dòng)路由節(jié)點(diǎn)。代碼如下:/data/db/mongodb/bin# ./mongos –configdb 192.168.1.102:20000,192.168.1.103:20000,192.168.1.104:20000 –logpath /data/mongos.log–logappend –port 30000
1)Hadoop集群的配置方案。本文使用的jdk版本是jdk1.6.0_26,Hadoop版本是hadoop-0.20.203,所有服務(wù)器節(jié)點(diǎn)的用戶是root,如表2所示。
表2 Hadoop集群的配置方案表
2)Java環(huán)境變量的配置。在確保服務(wù)器節(jié)點(diǎn)安裝完jdk1.6.0_26后修改環(huán)境配置文件/etc/profile,加入:
export JAVA_HOME=/opt/jdk1.6.0_26
export JRE_HOME=/opt/jdk1.6.0_26/jre
export CLASSPATH=.:$JAVA_HOME/lib:$JRE_HOME/lib:$CLASSPATH
export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH
export HADOOP_HOME=/opt/hadoop
export PATH=$HADOOP_HOME/bin:$PATH
HMGIS數(shù)據(jù)庫管理器開發(fā)語言為Java,開發(fā)環(huán)境為Eclipse 3.2。本文設(shè)計(jì)利用MapReduce并行編程模型實(shí)現(xiàn)空間數(shù)據(jù)查詢和自定義管理接口,且為了統(tǒng)一,HMGIS其余各部分功能利用MongoDB數(shù)據(jù)庫的Java驅(qū)動(dòng)進(jìn)行開發(fā)。
用戶登陸后,系統(tǒng)的主界面實(shí)現(xiàn)了空間數(shù)據(jù)列表顯示、增加、刪除和更新等基本操作,基于MapReduce的并行查詢功能在進(jìn)一步的開發(fā)當(dāng)中。前臺(tái)頁面運(yùn)用extjs實(shí)現(xiàn),通過調(diào)用后臺(tái)方法實(shí)現(xiàn),在實(shí)現(xiàn)過程中需要運(yùn)用到MongoDB的Java驅(qū)動(dòng)包。
PosGIS是一款在對象關(guān)系型數(shù)據(jù)庫PostgreSQL上增加了存儲(chǔ)管理空間數(shù)據(jù)能力的數(shù)據(jù)庫[5],具有訪問速度快、支持通用的關(guān)系數(shù)據(jù)庫管理系統(tǒng)等優(yōu)點(diǎn)。在PostGIS中,空間數(shù)據(jù)按BLOB存取,可實(shí)現(xiàn)跨平臺(tái)部署數(shù)據(jù)庫。
本實(shí)驗(yàn)所使用的數(shù)據(jù)是某地測繪點(diǎn)數(shù)據(jù),數(shù)據(jù)集共含有1 102 300個(gè)點(diǎn),其后綴名為.bat。實(shí)驗(yàn)數(shù)據(jù)的梯度分別是1萬、10萬、50萬、100萬條點(diǎn)數(shù)據(jù),其對應(yīng)的點(diǎn)數(shù)據(jù)大小分別是20 M、200 M、1 000 M和2 000 M。
由于空間點(diǎn)數(shù)據(jù)導(dǎo)入實(shí)驗(yàn)需建立單機(jī)模式(偽分布模式)的HMGIS進(jìn)行比較分析,所以對于單機(jī)模式的HMGIS,不需進(jìn)行MongoDB集群搭建,對于Hadoop也只是偽分布安裝。
1)實(shí)驗(yàn)?zāi)康?。比較PostGIS、單機(jī)HMGIS和擁有3個(gè)節(jié)點(diǎn)的HMGIS(HMGIS(3))3種模式下的點(diǎn)數(shù)據(jù)的入庫時(shí)間,如圖2所示。
2)實(shí)驗(yàn)結(jié)果。對于小數(shù)據(jù)量的點(diǎn)數(shù)據(jù)入庫,關(guān)系型數(shù)據(jù)庫PostGIS具有一定的優(yōu)勢,且單機(jī)HMGIS入庫時(shí)間要比HMGIS(3)短;隨著數(shù)據(jù)量的增加,單機(jī)HMGIS入庫時(shí)間優(yōu)于PostGIS,但比HMGIS(3)所用時(shí)間長。
3)結(jié)果分析。隨著數(shù)據(jù)量的增大,單機(jī)HMGIS在MongoDB數(shù)據(jù)寫入過程的時(shí)間優(yōu)勢彌補(bǔ)了Hadoop初始化過程的時(shí)間,因此點(diǎn)數(shù)據(jù)入庫時(shí)間比PostGIS短。但是HMGIS(3)有條件將大量的點(diǎn)數(shù)據(jù)集進(jìn)行合理劃分,并交給3個(gè)不同的節(jié)點(diǎn)服務(wù)器進(jìn)行并行處理。于是Hadoop并行框架的優(yōu)勢得以發(fā)揮,數(shù)據(jù)的入庫時(shí)間執(zhí)行效率高于單機(jī)HMGIS和PostGIS。
本文首先結(jié)合MongoDB和Hadoop集群設(shè)計(jì)實(shí)現(xiàn)了HMGIS數(shù)據(jù)庫管理器。為了驗(yàn)證HMGIS的可行性,將HMGIS與傳統(tǒng)關(guān)系型空間數(shù)據(jù)庫PostGIS在空間數(shù)據(jù)入庫、空間數(shù)據(jù)查詢等操作中進(jìn)行了性能比較。實(shí)驗(yàn)表明,HMGIS對海量空間數(shù)據(jù)的存儲(chǔ)管理和并行查詢是可行的,且具有一定的優(yōu)勢。
[1]鄭偉偉.IaaS云管理平臺(tái)的設(shè)計(jì)與實(shí)現(xiàn)[D].北京:北京郵電大學(xué),2012
[2]黎瑞瑜.分布式實(shí)時(shí)分發(fā)微博系統(tǒng)[D].廣州:華南理工大學(xué),2011
[3]陳慧英.基于NoSQL數(shù)據(jù)庫的海量天文圖像分布存儲(chǔ)研究[D].昆明:昆明理工大學(xué),2012
[4]黃長營.分布式數(shù)據(jù)流處理系統(tǒng)的負(fù)載均衡技術(shù)研究與實(shí)現(xiàn)[D].成都:電子科技大學(xué),2012
[5]陳敏敏.基于MongoDB云存儲(chǔ)平臺(tái)的論壇信息抽取與存儲(chǔ)研究[D].上海:上海交通大學(xué),2012
[6]王銳.基于MongoDB的關(guān)系網(wǎng)絡(luò)分析技術(shù)研究與應(yīng)用[D].長沙:國防科學(xué)技術(shù)大學(xué),2011
[7]崔鑫.海量空間數(shù)據(jù)的分布式存儲(chǔ)管理及并行處理技術(shù)的研究[D].長沙:國防科學(xué)技術(shù)大學(xué),2010
[8]程瑩,林星,張毅,等.云計(jì)算時(shí)代的數(shù)據(jù)庫研究[J].電信技術(shù),2011(1):88-94
[9]周松.面向數(shù)據(jù)密集型超級計(jì)算的基于糾刪碼的容錯(cuò)存儲(chǔ)技術(shù)研究[D].長沙:國防科學(xué)技術(shù)大學(xué),2010