本發(fā)明涉及移動通信數(shù)據(jù)業(yè)務(wù)技術(shù)領(lǐng)域,尤其涉及一種基于spark平臺的空間數(shù)據(jù)并行計(jì)算系統(tǒng)及其方法。
背景技術(shù):
隨著信息技術(shù)的深入發(fā)展,移動電話,車載網(wǎng)絡(luò)等各種設(shè)備不斷的產(chǎn)生著大量的空間數(shù)據(jù)。空間數(shù)據(jù)集通常是超大容量的,遠(yuǎn)超過單臺機(jī)器的計(jì)算能力。因此,我們需要一個(gè)云計(jì)算框架去存儲和計(jì)算大規(guī)??臻g數(shù)據(jù)。通常我們都是使用Hadoop或者spark等平臺來輔助處理大型數(shù)據(jù)集。
一方面,類似于SpatialHadoop和Hadoop-GIS都是通過擴(kuò)展Hadoop來支持空間數(shù)據(jù)并行處理。然而,由于Hadoop的磁盤級計(jì)算的特點(diǎn),這些系統(tǒng)在處理復(fù)雜和交互的工作方面表現(xiàn)很差。
而另一方面,Apache Spark是一個(gè)快速的,通用的大規(guī)模數(shù)據(jù)處理引擎。在支持進(jìn)行大型集群內(nèi)存計(jì)算的RDD的幫助下,Spark在交互查詢和迭代計(jì)算方面表現(xiàn)的比Hadoop好100倍以上。GeoSpark是Spark擴(kuò)展里最先進(jìn)的空間數(shù)據(jù)處理系統(tǒng),其通過擴(kuò)展彈性分布式數(shù)據(jù)集(RDDS)來支持空間數(shù)據(jù)。SpatialSpark在Spark上實(shí)現(xiàn)空間連接(Spatial Join)。
移動通信數(shù)據(jù)業(yè)務(wù)技術(shù)中,以下幾點(diǎn)限制了GeoSpark和SpatialSpark在空間數(shù)據(jù)處理上的性能:
(1)GeoSpark和SpatialSpark都是根據(jù)區(qū)域來分布空間數(shù)據(jù),該方法會將相同區(qū)域的空間數(shù)據(jù)分布到相同的機(jī)器上。這樣在處理范圍查詢時(shí)就會有一個(gè)不可避免的問題——負(fù)載不均衡。在將數(shù)據(jù)集分布到機(jī)器中后,每臺計(jì)算機(jī)都會建立一個(gè)本地索引,四叉樹或者R樹。當(dāng)要將范圍查詢從查詢發(fā)起的機(jī)器廣播到其余每臺機(jī)器上時(shí),只有查詢發(fā)起的機(jī)器會持續(xù)的從根節(jié)點(diǎn)到葉節(jié)點(diǎn)的檢索整個(gè)樹來發(fā)現(xiàn)查詢范圍中的空間數(shù)據(jù),而其余機(jī)器會在檢索過索引樹的根節(jié)點(diǎn)后停止。
(2)在GeoSpark和SpatialSpark處理空間連接(Spatial Join)查詢時(shí),系統(tǒng)會有巨大的通信成本和負(fù)載不均衡問題。Spark以一種RDD的形式來存儲和管理空間數(shù)據(jù),此RDD時(shí)一種不可改變的彈性分布式數(shù)據(jù)集。RDD提供兩個(gè)分區(qū)策略來并行的處理數(shù)據(jù)集分區(qū):HashPartitioner計(jì)算數(shù)據(jù)鍵的哈希值,使用模數(shù)為數(shù)據(jù)進(jìn)行分區(qū);RangerPartitioner試圖確保在每個(gè)分區(qū)的數(shù)據(jù)量是相等的。所有策略僅適用于一維數(shù)據(jù)的分區(qū)。
在Spark框架里,SparkSQL是Spark用來進(jìn)行數(shù)據(jù)管理和數(shù)據(jù)查詢的部分,他具有完整的數(shù)據(jù)查詢處理過程。SparkSQL在Apache Spark的頂端,它提供了一個(gè)數(shù)據(jù)框的API用以執(zhí)行關(guān)系操作,以簡化Spark中的大規(guī)模數(shù)據(jù)處理。SparkSQL為用戶提供了一個(gè)語言層,用以交互式的sql查詢操作。當(dāng)運(yùn)行查詢,SparkSQL將SQL查詢轉(zhuǎn)化成RDD操作。然后SparkSQL運(yùn)行RDD的文件查詢。當(dāng)數(shù)據(jù)是成規(guī)模時(shí),這需要很長的時(shí)間。此外,SparkSQL并不支持空間數(shù)據(jù)類型和空間操作,所以當(dāng)數(shù)據(jù)是空間數(shù)據(jù)時(shí),它會像對待普通數(shù)據(jù)一樣進(jìn)行處理,并不會利用其空間屬性。
技術(shù)實(shí)現(xiàn)要素:
為了解決現(xiàn)有技術(shù)的缺點(diǎn),本發(fā)明提供一種基于spark平臺的空間數(shù)據(jù)并行計(jì)算系統(tǒng)及其方法。本發(fā)明的該系統(tǒng)用于移動通話數(shù)據(jù)的并行計(jì)算,能夠支持更加高效和便捷的范圍查詢和空間連接的操作。
為實(shí)現(xiàn)上述目的,本發(fā)明采用以下技術(shù)方案:
一種基于spark平臺的空間數(shù)據(jù)并行計(jì)算系統(tǒng),該系統(tǒng)用于移動通話數(shù)據(jù)的并行計(jì)算,該系統(tǒng)包括從底層到頂層三個(gè)層次:
索引和存儲層,其配置為在spark集群中讀取并存儲待處理的空間數(shù)據(jù)集,所述空間數(shù)據(jù)集內(nèi)存儲的空間數(shù)據(jù)為移動通話數(shù)據(jù),移動通話數(shù)據(jù)的位置信息是相應(yīng)移動通信基站的位置;根據(jù)移動通信基站的位置,得到移動通信基站覆蓋范圍的Voronoi圖;結(jié)合Z Curve Hashing分區(qū)法與基于Voronoi圖的密度分割法對所述待處理的空間數(shù)據(jù)集建立空間索引;
查詢操作層,其配置為接收API層的空間操作請求,響應(yīng)空間操作請求并將空間數(shù)據(jù)的空間操作轉(zhuǎn)化為RDD文件操作,進(jìn)而根據(jù)空間索引來實(shí)現(xiàn)對所述待處理的空間數(shù)據(jù)集中移動通話數(shù)據(jù)的空間操作,并將空間操作后的結(jié)果反饋至API層;
API層,其被配置為通過擴(kuò)展SparkSQL來提供一個(gè)類SQL API來支持規(guī)則的空間數(shù)據(jù)關(guān)系和空間數(shù)據(jù)類型,且通過空間操作接口接收輸入的空間操作請求并傳送至查詢操作層;所述API層還被配置為接收查詢操作層中對空間數(shù)據(jù)進(jìn)行空間操作后的結(jié)果并輸出。
所述空間數(shù)據(jù)類型還包括用戶自定義空間數(shù)據(jù)類型。
本發(fā)明通過擴(kuò)展用戶自定義空間數(shù)據(jù)類型,進(jìn)一步擴(kuò)展了本發(fā)明的該并行計(jì)算系統(tǒng)處理的空間數(shù)據(jù)類型,能夠兼容多種空間數(shù)據(jù)類型,進(jìn)一步提高了空間數(shù)據(jù)處理的速度。
所述空間數(shù)據(jù)關(guān)系包括還包括用戶自定義空間數(shù)據(jù)關(guān)系。
本發(fā)明通過擴(kuò)展用戶自定義空間數(shù)據(jù)關(guān)系,進(jìn)一步擴(kuò)展了本發(fā)明的該并行計(jì)算系統(tǒng)處理的空間數(shù)據(jù)關(guān)系,能夠兼容多種空間數(shù)據(jù)關(guān)系,進(jìn)一步提高了空間數(shù)據(jù)處理的速度。
所述查詢操作層中的空間操作包括范圍查詢和空間連接。
本發(fā)明的基于spark平臺的空間數(shù)據(jù)并行計(jì)算系統(tǒng),使用spark內(nèi)存計(jì)算來處理移動通話數(shù)據(jù),大幅提高了計(jì)算速度;
采用Z Curve Hashing分區(qū)法,將空間數(shù)據(jù)集分布到spark集群中,保持了空間數(shù)據(jù)并行計(jì)算系統(tǒng)良好的負(fù)載均衡;在建立索引時(shí),使用基于Voronoi圖的密度分割方法,從而最大限度的提高并行化,避免數(shù)據(jù)失真問題?;谙嗤愋偷拿總€(gè)移動通話基站會覆蓋大約相同數(shù)量的移動用戶,以避免資源浪費(fèi)的實(shí)際情況。
本發(fā)明還擴(kuò)展了SparkSQL,使得基于spark平臺的空間數(shù)據(jù)并行計(jì)算系統(tǒng)支持多種空間類型和空間操作,從而達(dá)到了充分利用數(shù)據(jù)的空間屬性目的。
一種如基于spark平臺的空間數(shù)據(jù)并行計(jì)算系統(tǒng)的工作方法,該方法用于對移動通話數(shù)據(jù)的并行計(jì)算,包括:
在配置有空間數(shù)據(jù)并行計(jì)算系統(tǒng)的spark集群中,讀取并存儲待處理的空間數(shù)據(jù)集,其中,空間數(shù)據(jù)集內(nèi)存儲的空間數(shù)據(jù)為移動通話數(shù)據(jù),移動通話數(shù)據(jù)的位置信息是相應(yīng)移動通信基站的位置;根據(jù)移動通信基站的位置,得到移動通信基站覆蓋范圍的Voronoi圖;結(jié)合ZCurve Hashing分區(qū)法與基于Voronoi圖的密度分割法對所述待處理的空間數(shù)據(jù)集建立空間索引;
通過擴(kuò)展SparkSQL來提供一個(gè)類SQL API來支持規(guī)則的空間數(shù)據(jù)關(guān)系和空間數(shù)據(jù)類型,且通過空間操作接口接收輸入的空間操作請求并傳送至查詢操作層;
查詢操作層接收API層的空間操作請求,響應(yīng)空間操作請求并將空間數(shù)據(jù)的空間操作轉(zhuǎn)化為RDD文件操作,進(jìn)而根據(jù)空間索引來實(shí)現(xiàn)對所述待處理的空間數(shù)據(jù)集中移動通話數(shù)據(jù)的空間操作,并將空間操作后的結(jié)果反饋至API層;
API層接收查詢操作層中對空間數(shù)據(jù)進(jìn)行空間操作后的結(jié)果并輸出。
對所述待處理的空間數(shù)據(jù)集建立空間索引之前,還包括將待處理的空間數(shù)據(jù)集內(nèi)的空間數(shù)據(jù)按其所在的空間區(qū)域劃分為大小不相等的網(wǎng)格單元。這樣對于空間數(shù)據(jù)的空間連接操作以及ID劃分提供了前提條件。
對所述待處理的空間數(shù)據(jù)集建立空間索引之前,還包括將待處理的空間數(shù)據(jù)集內(nèi)的移動通話數(shù)據(jù)按移動通話數(shù)據(jù)的位置信息,將移動通話數(shù)據(jù)相對應(yīng)的移動通信基站所構(gòu)成的空間區(qū)域劃分為大小不相等的網(wǎng)格單元。
將移動通話數(shù)據(jù)相對應(yīng)的移動通信基站所構(gòu)成的空間區(qū)域劃分為大小不相等的網(wǎng)格單元之后,還包括:
采用Z Curve Hashing分區(qū)法對劃分成網(wǎng)格單元的空間數(shù)據(jù)集進(jìn)行分區(qū),得到若干子數(shù)據(jù)集;再基于Voronoi圖的密度分割法對得到的子數(shù)據(jù)集建立本地空間索引,最后構(gòu)建出待處理的空間數(shù)據(jù)集的空間索引。
基于spark平臺的空間數(shù)據(jù)并行計(jì)算系統(tǒng)的工作方法,還包括:
將每個(gè)網(wǎng)格單元中的空間數(shù)據(jù)集進(jìn)一步劃分,并且使用Z order Curve函數(shù)對進(jìn)一步劃分后的網(wǎng)格進(jìn)行排序,從而使得進(jìn)一步劃分后的網(wǎng)格從二維空間映射到一維空間;
使用哈希映射算法將進(jìn)一步細(xì)劃分后的網(wǎng)格中的空間數(shù)據(jù)存儲至spark集群的slave節(jié)點(diǎn)中。
每個(gè)網(wǎng)格單元對應(yīng)一個(gè)ID。
基于spark平臺的空間數(shù)據(jù)并行計(jì)算系統(tǒng)的工作方法,還包括:
在查詢操作層中對空間數(shù)據(jù)進(jìn)行空間連接操作,將空間數(shù)據(jù)的空間連接操作轉(zhuǎn)化為RDD文件操作;根據(jù)網(wǎng)格單元的ID,對位于同一個(gè)節(jié)點(diǎn)上的網(wǎng)格單元內(nèi)的空間數(shù)據(jù)進(jìn)行join操作;
在join操作的過程中,比較兩個(gè)網(wǎng)格單元內(nèi)空間數(shù)據(jù)量的大小,將包含空間數(shù)據(jù)量較少的網(wǎng)格單元內(nèi)的空間數(shù)據(jù)轉(zhuǎn)移到包含空間數(shù)據(jù)量較多的網(wǎng)格單元內(nèi)。
本發(fā)明采用Z Curve Hashing分區(qū)法,將空間數(shù)據(jù)集分布到spark集群中,保持了空間數(shù)據(jù)并行計(jì)算系統(tǒng)良好的負(fù)載均衡;在建立索引時(shí),使用基于Voronoi圖的密度分割方法,從而最大限度的提高并行化。
本發(fā)明的有益效果為:
(1)本發(fā)明的基于spark平臺的空間數(shù)據(jù)并行計(jì)算系統(tǒng),使用spark內(nèi)存計(jì)算來處理移動通話數(shù)據(jù)的查詢以及空間連接的操作,大幅提高了計(jì)算以及操作的速度。
(2)采用Z Curve Hashing分區(qū)法,將移動通話數(shù)據(jù)這些空間數(shù)據(jù)集分布到spark集群中,保持了空間數(shù)據(jù)并行計(jì)算系統(tǒng)良好的負(fù)載均衡;在建立索引時(shí),使用基于Voronoi圖的密度分割方法,從而最大限度的提高并行化;避免數(shù)據(jù)失真問題;基于相同類型的每個(gè)移動通話基站會覆蓋大約相同數(shù)量的移動用戶,以避免資源浪費(fèi)的實(shí)際情況。
(3)本發(fā)明還擴(kuò)展了SparkSQL,使得基于spark平臺的空間數(shù)據(jù)并行計(jì)算系統(tǒng)支持多種空間類型和空間操作,從而達(dá)到了充分利用移動通話數(shù)據(jù)的空間屬性目的。
附圖說明
圖1是本發(fā)明的基于spark平臺的空間數(shù)據(jù)并行計(jì)算系統(tǒng)的結(jié)構(gòu)示意圖;
圖2是本發(fā)明的數(shù)據(jù)區(qū)域劃分示意圖;
圖3(a)是本發(fā)明的Z Curve Hashing分區(qū)法對劃分成網(wǎng)格的數(shù)據(jù)集示意圖;
圖3(b)是本發(fā)明的集群數(shù)據(jù)分布示意圖;
圖3(c)是本發(fā)明的Z order curve函數(shù)排序示意圖;
圖4是本發(fā)明的存儲索引層處理數(shù)據(jù)流程示意圖;
圖5(a)是本發(fā)明的空間數(shù)據(jù)rdd1示意圖;
圖5(b)是本發(fā)明的空間數(shù)據(jù)rdd2示意圖;
圖5(c)是本發(fā)明的空間數(shù)據(jù)rdd3示意圖;
圖5(d)是本發(fā)明的空間數(shù)據(jù)rdd4示意圖;
圖6是本發(fā)明的基于spark平臺的空間數(shù)據(jù)并行計(jì)算系統(tǒng)的工作流程示意圖。
具體實(shí)施方式
下面將結(jié)合本發(fā)明實(shí)施例中的附圖,對本發(fā)明實(shí)施例中的技術(shù)方案進(jìn)行清楚、完整地描述,顯然,所描述的實(shí)施例僅僅是本發(fā)明一部分實(shí)施例,而不是全部的實(shí)施例?;诒景l(fā)明中的實(shí)施例,本領(lǐng)域普通技術(shù)人員在沒有作出創(chuàng)造性勞動前提下所獲得的所有其他實(shí)施例,都屬于本發(fā)明保護(hù)的范圍。
圖1是本發(fā)明實(shí)施例中一種基于spark平臺的空間數(shù)據(jù)并行計(jì)算系統(tǒng)的結(jié)構(gòu)示意圖,如圖所示本實(shí)施例中的基于spark平臺的空間數(shù)據(jù)并行計(jì)算系統(tǒng)包括:
索引和存儲層,其配置為在spark集群中讀取并存儲待處理的空間數(shù)據(jù)集,所述空間數(shù)據(jù)集內(nèi)存儲的空間數(shù)據(jù)為移動通話數(shù)據(jù),移動通話數(shù)據(jù)的位置信息是相應(yīng)移動通信基站的位置;根據(jù)移動通信基站的位置,得到移動通信基站覆蓋范圍的Voronoi圖;結(jié)合Z Curve Hashing分區(qū)法與基于Voronoi圖的密度分割法對所述待處理的空間數(shù)據(jù)集建立空間索引;
查詢操作層,其配置為接收API層的空間操作請求,響應(yīng)空間操作請求并將空間數(shù)據(jù)的空間操作轉(zhuǎn)化為RDD文件操作,進(jìn)而根據(jù)空間索引來實(shí)現(xiàn)對所述待處理的空間數(shù)據(jù)集中移動通話數(shù)據(jù)的空間操作,并將空間操作后的結(jié)果反饋至API層;
API層,其被配置為通過擴(kuò)展SparkSQL來提供一個(gè)類SQL API來支持規(guī)則的空間數(shù)據(jù)關(guān)系和空間數(shù)據(jù)類型,且通過空間操作接口接收輸入的空間操作請求并傳送至查詢操作層;所述API層還被配置為接收查詢操作層中對空間數(shù)據(jù)進(jìn)行空間操作后的結(jié)果并輸出。
其中,本發(fā)明通過擴(kuò)展用戶自定義空間數(shù)據(jù)類型,進(jìn)一步擴(kuò)展了本發(fā)明的該并行計(jì)算系統(tǒng)處理的空間數(shù)據(jù)類型,能夠兼容多種空間數(shù)據(jù)類型,進(jìn)一步提高了空間數(shù)據(jù)處理的速度。
空間數(shù)據(jù)關(guān)系包括還包括用戶自定義空間數(shù)據(jù)關(guān)系。
本發(fā)明通過擴(kuò)展用戶自定義空間數(shù)據(jù)關(guān)系,進(jìn)一步擴(kuò)展了本發(fā)明的該并行計(jì)算系統(tǒng)處理的空間數(shù)據(jù)關(guān)系,能夠兼容多種空間數(shù)據(jù)關(guān)系,進(jìn)一步提高了空間數(shù)據(jù)處理的速度。
查詢操作層中的空間操作包括范圍查詢和空間連接。
本發(fā)明中的實(shí)施例以移動通話數(shù)據(jù)為對象進(jìn)行說明,spark集群節(jié)點(diǎn)以4個(gè)節(jié)點(diǎn)A、B、C和D節(jié)點(diǎn)為例。
1)在索引和存儲層對數(shù)據(jù)進(jìn)行處理,步驟如下:
步驟(1):在配置有此并行計(jì)算系統(tǒng)的spark集群中,讀入所要處理的移動通話數(shù)據(jù)集。移動通話數(shù)據(jù)依據(jù)其空間屬性,如圖2地圖上的點(diǎn)所示。
步驟(2):對讀入的數(shù)據(jù)集按其空間區(qū)域劃分為不相等的網(wǎng)格單元(一般按集群內(nèi)節(jié)點(diǎn)個(gè)數(shù)為網(wǎng)格單元數(shù)),網(wǎng)格尺寸隨數(shù)據(jù)的大小而變化,劃分方式有三種方式劃分,分別為按x方向劃分,按y方向劃分,以及按xy方向劃分。本實(shí)施例中,spark集群有4個(gè)節(jié)點(diǎn),所以,圖2所示為按y方向劃分為4塊。
步驟(3):使用Z Curve Hashing分區(qū)法對劃分成網(wǎng)格的數(shù)據(jù)集進(jìn)行分區(qū),具體如下:
步驟(3.1):將每個(gè)網(wǎng)格再細(xì)劃分成更小的n*n網(wǎng)格中,如圖3(a)所示。并使用Z order curve函數(shù)將小網(wǎng)格按圖中所標(biāo)塊號進(jìn)行排序,排序結(jié)果如圖3(a)中所標(biāo)網(wǎng)格號,從而將二維網(wǎng)格映射到一維。
本發(fā)明采用Z Curve Hashing分區(qū)法對劃分成網(wǎng)格的數(shù)據(jù)集進(jìn)行分區(qū),達(dá)到的效果為:
經(jīng)步驟(3)處理后,避免了將相同區(qū)域的數(shù)據(jù)分布到同一機(jī)器的情況,從而保持了集群整體的負(fù)載均衡。
具體的Z order curve函數(shù)如下:
(1).選中各個(gè)方格的中心位置點(diǎn),表示為(x,y),x,y方向如圖3(c)所示。
(2).將網(wǎng)格號兩兩比較,舉例如網(wǎng)格A中心點(diǎn)(x1,y1),網(wǎng)格B中心點(diǎn)(x2,y2)。
當(dāng)x1<x2,則網(wǎng)格A在網(wǎng)格B之前。
當(dāng)x1=x2,則若y1>y2,網(wǎng)格A在網(wǎng)格B之后,否則反之。
當(dāng)x1>x2,則網(wǎng)格A在網(wǎng)格B之后。
(3).循環(huán)執(zhí)行步驟(2),直到將所有網(wǎng)格排序完成。然后按從前往后給網(wǎng)格以0到(n*n-1)編號。
步驟(3.2):使用哈希映射算法將上面經(jīng)過Z order curve分區(qū)后的數(shù)據(jù)按照網(wǎng)格編號映射到集群中的節(jié)點(diǎn)。具體實(shí)現(xiàn)如下:
使用哈希函數(shù)中的除留余數(shù)法,函數(shù)公式如下H(key)=key MOD p,在實(shí)例中,集群有四個(gè)節(jié)點(diǎn),所以p=4,key為經(jīng)步驟(3.1)處理后得到的網(wǎng)格編號,而H(key)即為相應(yīng)網(wǎng)格數(shù)據(jù)將要分配到的節(jié)點(diǎn)編號。
如圖3(b)所示,經(jīng)哈希映射,網(wǎng)格0,4,8,12的數(shù)據(jù)將會被分布到集群中的0號節(jié)點(diǎn)。
步驟(4):使用基于Voronoi圖的密度分割方法來對ZCH分區(qū)得到的子數(shù)據(jù)集建立本地索引。其實(shí)現(xiàn)如下:
(1).對于移動通話數(shù)據(jù),其位置信息是基于移動通信基站。所以通過計(jì)算移動通信基站位置來得到Voronoi地圖。本系統(tǒng)框架使用了第三方開發(fā)的Triangle包來生成Voronoi圖,生成命令為triangle-v dots。如圖4所示,其中每個(gè)多邊形代表一個(gè)基站覆蓋的區(qū)域。
(2).Voronoi圖生成兩個(gè)文件,分別為Voronoi圖中的點(diǎn)和邊,其中點(diǎn)為圖中多邊形的交點(diǎn),邊為多邊形的變。根據(jù)上述兩個(gè)文件對我們的數(shù)據(jù)按照Voronoi圖來進(jìn)行分割。
(3).對分割好的數(shù)據(jù)使用R樹來建立索引。其中每個(gè)Voronoi圖中的多邊形都是一個(gè)葉節(jié)點(diǎn)的空間尺度,并且在多邊形中的數(shù)據(jù)通過相對應(yīng)的葉節(jié)點(diǎn)來索引。
使用基于Voronoi圖的密度分割方法來對Z Curve Hashing分區(qū)法得到的子數(shù)據(jù)集建立本地索引的有益效果為:確保R樹的每個(gè)葉節(jié)點(diǎn)包含大約相等的數(shù)據(jù)記錄,避免數(shù)據(jù)失真問題。此解決方案是基于相同類型的每個(gè)移動通話基站會覆蓋大約相同數(shù)量的移動用戶,以避免資源浪費(fèi)的實(shí)際情況。
2)對于查詢操作層操作如下:
用戶在API層請求所需操作,系統(tǒng)會將其轉(zhuǎn)化對RDD的相關(guān)操作,在本層中,數(shù)據(jù)和索引是以RDD形式存在的,數(shù)據(jù)與索引可以由一個(gè)RDD來表示。
其中有范圍查詢及空間連接,具體實(shí)現(xiàn)如下:
(1)范圍查詢具體實(shí)現(xiàn):
1.在獲得查詢請求后,集群中的master節(jié)點(diǎn)將查詢請求發(fā)送給所有的slave節(jié)點(diǎn)。
2.由于數(shù)據(jù)與索引在同一個(gè)RDD中,所以在接收到查詢請求后,slave節(jié)點(diǎn)從本地RDD中取出數(shù)據(jù)索引部分。
3.檢索索引,與查詢條件比較。得到符合條件的索引樹節(jié)點(diǎn)。
4.到數(shù)據(jù)部分取出上一步得到的索引樹節(jié)點(diǎn)對應(yīng)的數(shù)據(jù)。
5.將結(jié)果返還給用戶
(2)空間連接具體實(shí)現(xiàn):
1.對于要進(jìn)行空間連接的兩個(gè)數(shù)據(jù)RDD分別為rdd1和rdd2,對rdd1和rdd2進(jìn)行join操作所要滿足的條件θ(例如in或者overlap等),首先取出他們的索引部分,命名為node1和node2。
2.到兩組索引的部分索引對。滿足如下條件:<n1,n2>,其中n1屬于node1索引的葉子節(jié)點(diǎn),n2屬于node2索引的葉子節(jié)點(diǎn),n1和n2滿足join條件θ。并同時(shí)記錄下n1和n2對應(yīng)的數(shù)據(jù)大小。
3.根據(jù)索引對<n1,n2>中數(shù)據(jù)量較大的ni數(shù)據(jù)所在的pi區(qū),生產(chǎn)一條記錄<pi,nj>,nj是索引對中另一個(gè)節(jié)點(diǎn),即數(shù)據(jù)量小的節(jié)點(diǎn)。
4.對rdd1和rdd2的數(shù)據(jù),首先進(jìn)行filter操作,過濾條件是數(shù)據(jù)所屬節(jié)點(diǎn)屬于步驟2得到的節(jié)點(diǎn)對,然后根據(jù)步驟3得到的<pi,nj>進(jìn)行重新分配。得到rdd3和rdd4。
5.舉例如圖5(a)和圖5(b)所示,rdd1與rdd2進(jìn)行連接操作,首先由步驟2過濾掉不符合join操作條件θ(如in)的數(shù)據(jù)部分—A3,A4,B3,B4,而對A1與B1,A2與B2進(jìn)行join操作。并且由步驟3得知,A1數(shù)據(jù)量大于B1,A2數(shù)據(jù)量小于B2。則將rdd2中的B1數(shù)據(jù)傳輸?shù)紸1數(shù)據(jù)所在分區(qū),形成新的rdd3,同樣,將rdd1中的A2數(shù)據(jù)傳輸?shù)絩dd2中,生成新的rdd4,如圖5(c)(d)所示。
6.對rdd3和rdd4中的數(shù)據(jù)分別進(jìn)行join操作,得到最終結(jié)果。
3)對API層實(shí)現(xiàn)如下:
API層通過擴(kuò)展SparkSQL的數(shù)據(jù)框而增加了多種空間數(shù)據(jù)類型,空間關(guān)系和空間操作。
(1)對于空間數(shù)據(jù)類型,是通過擴(kuò)展用戶自定義類型,增加了如Point,Lint及Polygon。
(2)對于空間關(guān)系,通過擴(kuò)展用戶自定義方法(User-Defined-Functions)添加了新的關(guān)系,如in,overlap和intersect。
對于空間操作,通過擴(kuò)展Saprk SQL的數(shù)據(jù)框,API層提供了兩個(gè)基本的空間操作——范圍查詢和空間連接。
SparkSQL其為了將空間操作轉(zhuǎn)化為RDD操作,會執(zhí)行如下步驟:
步驟(1):為將空間操作轉(zhuǎn)化為RDD操作,SpakrSQL根據(jù)相應(yīng)的數(shù)據(jù)框操作建立一個(gè)操作樹。
步驟(2):然后SparkSQL使用模式匹配函數(shù)遞歸樹的所有節(jié)點(diǎn),將每個(gè)數(shù)據(jù)框函數(shù)轉(zhuǎn)換為相對應(yīng)的RDD操作。換句話說,這個(gè)轉(zhuǎn)換過程是將SQL的語言樹轉(zhuǎn)化為RDD的實(shí)現(xiàn)樹。
步驟(3):最后SparkSQL后序遍歷步驟(2)中所得到的樹,從而得到結(jié)果。
為將范圍查詢和空間連接兩種空間操作加入到SparkSQL,需要在logical抽象類中添加相對應(yīng)的抽象類,同時(shí)在execution中添加對應(yīng)的實(shí)現(xiàn)類,并在模式匹配函數(shù)中添加相應(yīng)的case。如此,更多的空間操作也可按照上面的方式添加到API層。
例如對于范圍查詢,需要在logical中添加其對應(yīng)的抽象類,之后在execution中通過繼承Filter類,實(shí)現(xiàn)范圍查詢,最后在模式匹配函數(shù)中添加相應(yīng)的case。
如圖6所示,本發(fā)明的基于spark平臺的空間數(shù)據(jù)并行計(jì)算系統(tǒng)的工作方法,包括:
在配置有空間數(shù)據(jù)并行計(jì)算系統(tǒng)的spark集群中,讀取并存儲待處理的空間數(shù)據(jù)集,結(jié)合Z Curve Hashing分區(qū)法與基于Voronoi圖的密度分割法對所述待處理的空間數(shù)據(jù)集建立空間索引;
通過擴(kuò)展SparkSQL來提供一個(gè)類SQL API來支持規(guī)則的空間數(shù)據(jù)關(guān)系和空間數(shù)據(jù)類型,且通過空間操作接口接收輸入的空間操作請求并傳送至查詢操作層;
查詢操作層接收API層的空間操作請求,響應(yīng)空間操作請求并將空間數(shù)據(jù)的空間操作轉(zhuǎn)化為RDD文件操作,進(jìn)而根據(jù)空間索引來實(shí)現(xiàn)對所述待處理的空間數(shù)據(jù)集中空間數(shù)據(jù)的空間操作,并將空間操作后的結(jié)果反饋至API層;
API層接收查詢操作層中對空間數(shù)據(jù)進(jìn)行空間操作后的結(jié)果并輸出。
對所述待處理的空間數(shù)據(jù)集建立空間索引之前,還包括將待處理的空間數(shù)據(jù)集內(nèi)的空間數(shù)據(jù)按其所在的空間區(qū)域劃分為大小不相等的網(wǎng)格單元。這樣對于空間數(shù)據(jù)的空間連接操作以及ID劃分提供了前提條件。
將待處理的空間數(shù)據(jù)集內(nèi)的空間數(shù)據(jù)按其所在的空間區(qū)域劃分為大小不相等的網(wǎng)格單元之后,還包括:
采用Z Curve Hashing分區(qū)法對劃分成網(wǎng)格單元的空間數(shù)據(jù)集進(jìn)行分區(qū),得到若干子數(shù)據(jù)集;再基于Voronoi圖的密度分割法對得到的子數(shù)據(jù)集建立本地空間索引,最后構(gòu)建出待處理的空間數(shù)據(jù)集的空間索引。
本發(fā)明采用Z Curve Hashing分區(qū)法,將空間數(shù)據(jù)集分布到spark集群中,保持了空間數(shù)據(jù)并行計(jì)算系統(tǒng)良好的負(fù)載均衡;在建立索引時(shí),使用基于Voronoi圖的密度分割方法,從而最大限度的提高并行化。
基于spark平臺的空間數(shù)據(jù)并行計(jì)算系統(tǒng)的工作方法,還包括:
將每個(gè)網(wǎng)格單元中的空間數(shù)據(jù)集進(jìn)一步劃分,并且使用Z order Curve函數(shù)對進(jìn)一步劃分后的網(wǎng)格進(jìn)行排序,從而使得進(jìn)一步劃分后的網(wǎng)格從二維空間映射到一維空間;
使用哈希映射算法將進(jìn)一步細(xì)劃分后的網(wǎng)格中的空間數(shù)據(jù)存儲至spark集群的slave節(jié)點(diǎn)中。這樣能夠避免將相同區(qū)域的數(shù)據(jù)分布到同一機(jī)器的情況,從而保持了集群整體的負(fù)載均衡。
每個(gè)網(wǎng)格單元對應(yīng)一個(gè)ID。這樣對于空間數(shù)據(jù)查詢以及空間連接操作,將空間數(shù)據(jù)的空間連接操作轉(zhuǎn)化為RDD文件操作,提供了一一對應(yīng)的保障。
基于spark平臺的空間數(shù)據(jù)并行計(jì)算系統(tǒng)的工作方法,還包括:
在查詢操作層中對空間數(shù)據(jù)進(jìn)行空間連接操作,將空間數(shù)據(jù)的空間連接操作轉(zhuǎn)化為RDD文件操作;根據(jù)網(wǎng)格單元的ID,對位于同一個(gè)節(jié)點(diǎn)上的網(wǎng)格單元內(nèi)的空間數(shù)據(jù)進(jìn)行join操作;
在join操作的過程中,比較兩個(gè)網(wǎng)格單元內(nèi)空間數(shù)據(jù)量的大小,將包含空間數(shù)據(jù)量較少的網(wǎng)格單元內(nèi)的空間數(shù)據(jù)轉(zhuǎn)移到包含空間數(shù)據(jù)量較多的網(wǎng)格單元內(nèi)。
(1)本發(fā)明的基于spark平臺的空間數(shù)據(jù)并行計(jì)算系統(tǒng),使用spark內(nèi)存計(jì)算來處理移動通話數(shù)據(jù)的查詢以及空間連接的操作,大幅提高了計(jì)算以及操作的速度。
(2)采用Z Curve Hashing分區(qū)法,將移動通話數(shù)據(jù)這些空間數(shù)據(jù)集分布到spark集群中,保持了空間數(shù)據(jù)并行計(jì)算系統(tǒng)良好的負(fù)載均衡;在建立索引時(shí),使用基于Voronoi圖的密度分割方法,從而最大限度的提高并行化;避免數(shù)據(jù)失真問題;基于相同類型的每個(gè)移動通話基站會覆蓋大約相同數(shù)量的移動用戶,以避免資源浪費(fèi)的實(shí)際情況。
(3)本發(fā)明還擴(kuò)展了SparkSQL,使得基于spark平臺的空間數(shù)據(jù)并行計(jì)算系統(tǒng)支持多種空間類型和空間操作,從而達(dá)到了充分利用移動通話數(shù)據(jù)的空間屬性目的。
為了評價(jià)基于spark平臺的空間數(shù)據(jù)并行計(jì)算系統(tǒng)的性能,將我們基于spark平臺的空間數(shù)據(jù)并行計(jì)算系統(tǒng)與spark進(jìn)行比較。因?yàn)閮?nèi)存計(jì)算的原因,基于spark的系統(tǒng)比基于Hadoop的快很多。而基于spark平臺的空間數(shù)據(jù)并行計(jì)算系統(tǒng)是通過擴(kuò)展spark實(shí)現(xiàn)的,所以不測試基于Hadoop的系統(tǒng)。實(shí)驗(yàn)重點(diǎn)集中在兩個(gè)數(shù)據(jù)集的空間范圍查詢:移動電話通信的合成數(shù)據(jù)集和真實(shí)數(shù)據(jù)集。
基于spark平臺的空間數(shù)據(jù)并行計(jì)算系統(tǒng)是建立在1.5.0版本的spark和1.8的java上。將基于spark平臺的空間數(shù)據(jù)并行計(jì)算系統(tǒng)部署在含有四個(gè)節(jié)點(diǎn)的集群中。每個(gè)節(jié)點(diǎn)運(yùn)行Ubuntu Linux 14.04版本,Xeon 2.3GHz cpu以及20G內(nèi)存。
選擇兩個(gè)數(shù)據(jù)集來測試性能:(1)合成數(shù)據(jù)集:一個(gè)隨機(jī)位于矩形區(qū)域的點(diǎn)數(shù)據(jù)集。我們生成幾個(gè)合成數(shù)據(jù)集實(shí)例包含從1600萬到1億1200萬的記錄。(2)手機(jī)數(shù)據(jù)集。一個(gè)真正的通信數(shù)據(jù)集是從中國移動通信集團(tuán)公司提取的一個(gè)中等規(guī)模城市的數(shù)據(jù)集。一天內(nèi)的數(shù)據(jù)包含1300萬個(gè)移動電話數(shù)據(jù)。此次試驗(yàn)中我們使用了從一天到八天的數(shù)據(jù)量。數(shù)據(jù)集的數(shù)量從1300萬(一天的數(shù)據(jù))增加到超過1億個(gè)記錄(八天的數(shù)據(jù))。移動通信數(shù)據(jù)在該地區(qū)的用戶密度分布不均。
空間連接操作需要兩個(gè)是數(shù)據(jù)集作為操作。本實(shí)驗(yàn)采用了兩種不同的通信數(shù)據(jù),其中一個(gè)數(shù)據(jù)集是通過數(shù)次稀釋另一個(gè)數(shù)據(jù)集得到的。數(shù)據(jù)集規(guī)模從1000萬個(gè)記錄(一天的數(shù)據(jù))到1億個(gè)記錄(八天的數(shù)據(jù))。為避免特殊情況,每個(gè)實(shí)驗(yàn)結(jié)果都是20個(gè)隨機(jī)實(shí)驗(yàn)的平均值。
通過實(shí)驗(yàn)驗(yàn)證,本發(fā)明的基于spark平臺的空間數(shù)據(jù)并行計(jì)算系統(tǒng)在查詢和空間連接操作的處理速度上,都比spark優(yōu)越。因?yàn)樵诜秶樵冎?,查詢范圍肯定位于一個(gè)被某個(gè)節(jié)點(diǎn)所索引的區(qū)域中。因此,當(dāng)其他的從節(jié)點(diǎn)執(zhí)行查詢時(shí),比較索引樹的根節(jié)點(diǎn)的區(qū)域后,處理完成,因?yàn)楦?jié)點(diǎn)表示的區(qū)域與查詢區(qū)域沒有交集。這些節(jié)點(diǎn)只需要時(shí)間去索引數(shù)據(jù)。只有一個(gè)節(jié)點(diǎn)需要搜索根節(jié)點(diǎn)的子樹并且根據(jù)索引來獲取數(shù)據(jù)。
本領(lǐng)域普通技術(shù)人員可以理解實(shí)現(xiàn)上述實(shí)施例方法中的全部或部分流程,是可以通過計(jì)算機(jī)程序來指令相關(guān)的硬件來完成,所述的程序可存儲于一計(jì)算機(jī)可讀取存儲介質(zhì)中,該程序在執(zhí)行時(shí),可包括如上述各方法的實(shí)施例的流程。其中,所述的存儲介質(zhì)可為磁碟、光盤、只讀存儲記憶體(Read-Only Memory,ROM)或隨機(jī)存儲記憶體(Random AccessMemory,RAM)等。
上述雖然結(jié)合附圖對本發(fā)明的具體實(shí)施方式進(jìn)行了描述,但并非對本發(fā)明保護(hù)范圍的限制,所屬領(lǐng)域技術(shù)人員應(yīng)該明白,在本發(fā)明的技術(shù)方案的基礎(chǔ)上,本領(lǐng)域技術(shù)人員不需要付出創(chuàng)造性勞動即可做出的各種修改或變形仍在本發(fā)明的保護(hù)范圍以內(nèi)。