專利名稱:基于MapReduce的大圖上距離連接查詢方法
技術(shù)領(lǐng)域:
本發(fā)明屬于信息技術(shù)領(lǐng)域,具體涉及如何在MapReduce環(huán)境下有效地進(jìn)行大圖數(shù)據(jù)上的距離連接查詢方法。
背景技術(shù):
現(xiàn)代社會(huì)中,圖的應(yīng)用越來(lái)越廣泛。大部分有關(guān)圖的操作都需要進(jìn)行迭代捜索,例如可達(dá)性查詢、最短路徑查詢、最小生成樹(shù)查詢以及距離連接查詢等。這些操作的捜索空間都很大。以距離連接查詢?yōu)槔o定ー個(gè)有向帶權(quán)圖G、源結(jié)點(diǎn)集合S、目標(biāo)結(jié)點(diǎn)集合T以及距離閾值dt,距離連接查詢要求返回S和T之間的結(jié)點(diǎn)對(duì),這些結(jié)點(diǎn)對(duì)之間的最短距離小于給定的閾值dt。圖I給出了一個(gè)距離連接查詢的示例,圖1(a)表示原圖G,其中結(jié)點(diǎn)a和b為S中的結(jié)點(diǎn),結(jié)點(diǎn)g和h為T中的結(jié)點(diǎn),距離閾值dt設(shè)為10,查詢的結(jié)果有3條,如圖I (b)所示。距離連接查詢?cè)诂F(xiàn)實(shí)生活中具有廣泛的應(yīng)用。在ー個(gè)程序員開(kāi)發(fā)網(wǎng)絡(luò)中,我們可以通過(guò)距離連接查詢找到距離在某一個(gè)范圍內(nèi)的程序員與測(cè)試員的關(guān)系。此外,在社交網(wǎng)絡(luò)中,發(fā)現(xiàn)銷售者和顧客之間的距離小于給定閾值,也可以用于制定廣告投放和銷售策略。距離連接查詢的基本做法是首先計(jì)算出S和T之間所有點(diǎn)對(duì)的最短距離,然后返回滿足距離要求的點(diǎn)對(duì)。然而這樣會(huì)導(dǎo)致非常大的搜索空間和計(jì)算量。此外,隨著圖的規(guī)模越來(lái)越大,單臺(tái)機(jī)器的內(nèi)存可能放不下整個(gè)圖,此時(shí)還需要考慮緩沖區(qū)的問(wèn)題。已有的距離連接查詢算法大多基于單臺(tái)計(jì)算機(jī),采取直接計(jì)算源結(jié)點(diǎn)集S與目的結(jié)點(diǎn)集T之間所有點(diǎn)對(duì)最短距離的方法,首先計(jì)算出所有點(diǎn)對(duì)間的最短距離,然后返回滿足條件的點(diǎn)對(duì)。計(jì)算最短距離的方法主要采用Di jkstra(參考文獻(xiàn)E. W. Di jkstra.A note on two problems in connexion with graphs. Numerische Mathematikj pages269-271,1959.)或A*算法,迭代計(jì)算結(jié)點(diǎn)之間的最短距離。同時(shí)在搜索的過(guò)程中,利用一些索引來(lái)引導(dǎo)搜索,比如Landmark索引,減小搜索空間,提高迭代效率。
發(fā)明內(nèi)容
本發(fā)明利用MapReduce分布式環(huán)境來(lái)對(duì)大圖數(shù)據(jù)進(jìn)行管理,提出了ー種自適應(yīng)的迭代實(shí)現(xiàn)方法來(lái)回答大圖上的距離連接查詢。MapReduce環(huán)境下,迭代任務(wù)的代價(jià)主要來(lái)自于三部分①算法本身的復(fù)雜性迭代執(zhí)行次數(shù)算法的實(shí)現(xiàn)方式。為了減小距離連接查詢算法的搜索空間,本發(fā)明提出了一種雙向剪枝搜索方法;為了減少算法的迭代次數(shù),本發(fā)明針對(duì)不同的結(jié)點(diǎn)提出了一種基于Segment索引的并行拓展方式;同時(shí)考慮到MapReduce環(huán)境下,任務(wù)一般具有多種不同的實(shí)現(xiàn)方式。對(duì)于迭代任務(wù)來(lái)說(shuō),如何在不同的情況下,為每一次的迭代選擇比較好的實(shí)現(xiàn)方式對(duì)于任務(wù)的執(zhí)行也是非常重要的。本專利提出了ー種基于代價(jià)模型的自適應(yīng)算法,可以通過(guò)代價(jià)模型為每次迭代自動(dòng)選擇比較合適的實(shí)現(xiàn)方法。本專利提出了一種盡量減小距離連接查詢搜索空間以及迭代次數(shù)的自適應(yīng)算法。該算法是在MapReduce的開(kāi)源實(shí)現(xiàn)-Hadoop上進(jìn)行的。本發(fā)明提出一種基于MapReduce
的大圖上距離連接查詢方法,其步驟包括I)提取初始化的查詢參數(shù)原圖、已訪問(wèn)結(jié)點(diǎn)、拓展范圍和查詢結(jié)果;2)在hadoop上對(duì)原圖進(jìn)行雙向拓展,拓展從源結(jié)點(diǎn)集合和目標(biāo)結(jié)點(diǎn)集合開(kāi)始,每次拓展基于代價(jià)模型選擇執(zhí)行方式,采用動(dòng)態(tài)閾值剪枝操作,將新拓展的結(jié)點(diǎn)加入已訪問(wèn)結(jié)點(diǎn)集合;3)繼續(xù)遍歷未完成拓展的剩余結(jié)點(diǎn),直到所有滿足拓展范圍的結(jié)點(diǎn)都完成拓展;4)完成迭代后,記錄所述已訪問(wèn)節(jié)點(diǎn)集合中目標(biāo)結(jié)點(diǎn)和源結(jié)點(diǎn)間路徑查詢結(jié)果,返回查詢結(jié)果。所述動(dòng)態(tài)閥值剪枝操作為對(duì)每一次正向或反向拓展,設(shè)定距離連接查詢的閾值;·在進(jìn)行拓展時(shí)統(tǒng)計(jì)已訪問(wèn)結(jié)點(diǎn)集合中與源結(jié)點(diǎn)或目標(biāo)結(jié)點(diǎn)間最小距離,更新閥值并對(duì)所述結(jié)點(diǎn)進(jìn)行剪枝拓展。動(dòng)態(tài)閾值的信息存儲(chǔ)在拓展范圍FStat和BStat集合中。在拓展操作時(shí)使用Segment索引。毎次拓展操作基于代價(jià)模型選擇使用主動(dòng)拓展或按需拓展的方式進(jìn)行結(jié)點(diǎn)迭代拓展。所述代價(jià)模型基于Hadoop構(gòu)建,訓(xùn)練特征參數(shù)包括1)原圖自身特性;2)順序掃描和索引訪問(wèn)的代價(jià)比率;3)滿足拓展范圍的結(jié)點(diǎn)數(shù)目;4)已訪問(wèn)結(jié)點(diǎn)數(shù)目。所述主動(dòng)拓展為,對(duì)已訪問(wèn)結(jié)點(diǎn)和原圖同時(shí)進(jìn)行Map操作,得到的結(jié)果進(jìn)行Reduce操作,完成對(duì)每個(gè)滿足條件結(jié)點(diǎn)的拓展并將結(jié)果輸出到新的已訪問(wèn)結(jié)點(diǎn)集合中。所述按需拓展為,擴(kuò)展前為原圖建立索引MapFile文件,擴(kuò)展過(guò)程中對(duì)已訪問(wèn)結(jié)點(diǎn)進(jìn)行Map操作,結(jié)果進(jìn)行Reduce操作,根據(jù)MapFile索引獲取對(duì)應(yīng)結(jié)點(diǎn)的鄰接表,完成對(duì)每個(gè)滿足條件結(jié)點(diǎn)的拓展并將結(jié)果輸出到新的已訪問(wèn)結(jié)點(diǎn)集合中。每進(jìn)行一次拓展之后,都需要對(duì)當(dāng)前結(jié)果進(jìn)行更新,保證目標(biāo)結(jié)點(diǎn)和源結(jié)點(diǎn)間的距離查詢值為當(dāng)前最小。原圖、已訪問(wèn)結(jié)點(diǎn)、拓展范圍和查詢結(jié)果是查詢中間參數(shù),儲(chǔ)存在hadoop文件系統(tǒng)HDFS中;所述原圖G按照鄰接表的方式進(jìn)行存儲(chǔ);所述已訪問(wèn)結(jié)點(diǎn)、拓展范圍和查詢結(jié)果按照key_>value的形式進(jìn)行存儲(chǔ)。本發(fā)明的有益效果I)為了降低算法的捜索空間,本專利提出了一種基于動(dòng)態(tài)閾值進(jìn)行剪枝的雙向搜索算法,可以大大地減小本距離連接查詢方法的捜索空間;2)為了減少迭代次數(shù),本發(fā)明針對(duì)不同的結(jié)點(diǎn)提出了ー種并行拓展方式,可以ー次同時(shí)拓展盡可能多的結(jié)點(diǎn)。同時(shí),利用Segment索引可以一次拓展原圖中的多條邊,減小本查詢方法的迭代次數(shù);3)考慮到MapReduce環(huán)境下,任務(wù)一般具有多種不同的實(shí)現(xiàn)方式。對(duì)于迭代任務(wù)來(lái)說(shuō),如何在不同的情況下,為每一次迭代選擇比較好的實(shí)現(xiàn)方式對(duì)于任務(wù)的執(zhí)行是非常關(guān)鍵的。對(duì)此,本專利提出了ー種基于代價(jià)模型的自適應(yīng)方法,可以通過(guò)代價(jià)模型為每次迭代自動(dòng)選擇合適的實(shí)現(xiàn)方法,大大提高任務(wù)的執(zhí)行效率。從圖6中可以看出,在兩個(gè)真實(shí)圖數(shù)據(jù)上的結(jié)果顯示,使用代價(jià)模型可以大大減少查詢執(zhí)行的時(shí)間。
圖I (a)、I (b)是本發(fā)明ー種距離連接查詢方法傳統(tǒng)的距離連接查詢示意圖;圖2是本發(fā)明ー種距離連接查詢方法基于MapReduce的結(jié)構(gòu)圖;圖3 Ca)是本發(fā)明ー種距離連接查詢方法第一次拓展模塊示意圖;圖3 (b)是本發(fā)明ー種距離連接查詢方法第二次拓展模塊示意圖;圖4是本發(fā)明ー種距離連接查詢方法主動(dòng)拓展實(shí)現(xiàn)示意圖;圖5是本發(fā)明ー種距離連接查詢方法按需拓展實(shí)現(xiàn)示意圖;圖6是本發(fā)明使用代價(jià)模型cost model的效果圖。
具體實(shí)施方法下面說(shuō)明具體實(shí)現(xiàn)步驟和詳細(xì)方法。本實(shí)施方法是在Hadoop平臺(tái)上進(jìn)行的,主要針對(duì)MapReduce環(huán)境下影響迭代任務(wù)執(zhí)行效率的三個(gè)因素進(jìn)行優(yōu)化。這里首先給出整個(gè)方法的框架圖,并且說(shuō)明每ー個(gè)主要模塊負(fù)責(zé)的內(nèi)容,接著結(jié)合附圖詳細(xì)說(shuō)明每一個(gè)模塊的設(shè)計(jì)以及實(shí)現(xiàn)方式。I.算法框架本專利的方法要求在Hadoop上高效地實(shí)現(xiàn)距離連接查詢算法,要求盡可能減小算法的捜索空間,減小算法的迭代次數(shù),同時(shí)能夠自適應(yīng)地為每一次迭代選擇合適的實(shí)現(xiàn)方式。針對(duì)上述要求,本專利提出了如圖2所示的計(jì)算框架,圖2的左半部分表示框架的數(shù)據(jù)部分,其中原圖、已訪問(wèn)的結(jié)點(diǎn)、拓展范圍以及結(jié)果都以key->valUe的形式存儲(chǔ)在Hadoop的分布式文件系統(tǒng)HDFS上。圖2的右半部分表示迭代計(jì)算的模塊流程圖,其中終止模塊負(fù)責(zé)判斷迭代是否已經(jīng)全部完成,如果已經(jīng)得到距離連接查詢的正確結(jié)果,則終止迭代;否則,繼續(xù)進(jìn)行迭代。迭代之前,由實(shí)現(xiàn)選擇模塊根據(jù)代價(jià)模型來(lái)選擇采用何種實(shí)現(xiàn)方式進(jìn)行路徑拓展,然后路徑拓展模塊根據(jù)選擇的實(shí)現(xiàn)方式進(jìn)行路徑拓展,拓展結(jié)束后,收集需要的信息以及可以確定的連接結(jié)果。2. I存儲(chǔ)結(jié)構(gòu)本專利需要存儲(chǔ)的數(shù)據(jù)包括原圖G、已訪問(wèn)結(jié)點(diǎn)Visited Nodes、拓展的范圍Expansion Range以及連接的結(jié)果Results,均按照key->value的形式進(jìn)行存儲(chǔ),其中后三者是算法運(yùn)行過(guò)程中需要的數(shù)據(jù)。原圖G按照鄰接表的方式進(jìn)行存儲(chǔ),每個(gè)結(jié)點(diǎn)一條記錄,key表示結(jié)點(diǎn)的標(biāo)識(shí)符id, value表示該結(jié)點(diǎn)關(guān)聯(lián)的出邊,邊按照(to, weight)的格式存儲(chǔ),weight表示id到to的邊的權(quán)重。拓展過(guò)的結(jié)點(diǎn)存儲(chǔ)姆個(gè)結(jié)點(diǎn)與拓展相關(guān)的信息,key表示結(jié)點(diǎn)id, value按照(s, costf, e0)格式存儲(chǔ),結(jié)點(diǎn)s屬于源結(jié)點(diǎn)集S, Costf表示s經(jīng)過(guò)拓展到達(dá)id結(jié)點(diǎn)的距離(也說(shuō)明該結(jié)點(diǎn)是從源結(jié)點(diǎn)s拓展而來(lái)的),%表示拓展標(biāo)記,即該結(jié)點(diǎn)是否已經(jīng)被拓展,O表示未完成,I表示已完成拓展。如果采用雙向捜索算法,除了上面描述的正向拓展外,已訪問(wèn)結(jié)點(diǎn)信息還包括反向拓展的結(jié)點(diǎn)信息,以id_>(t, costb, e)的格式進(jìn)行存儲(chǔ),該記錄含義與上面類似。拓展范圍用來(lái)對(duì)每個(gè)結(jié)點(diǎn)可以拓展的范圍進(jìn)行限制,姆ー個(gè)源結(jié)點(diǎn)和目標(biāo)結(jié)點(diǎn)維持一條記錄,key為結(jié)點(diǎn)的id, value記錄范圍的上下界。結(jié)果則用來(lái)記錄各點(diǎn)對(duì)是否滿足距離連接。2. 2路徑拓展模塊
路徑拓展模塊主要負(fù)責(zé)對(duì)結(jié)點(diǎn)進(jìn)行拓展,本專利的思路依然是通過(guò)拓展的方式來(lái)計(jì)算任意源節(jié)點(diǎn)S集合與目標(biāo)節(jié)點(diǎn)集合T之間的結(jié)點(diǎn)對(duì)s和t的最短距離,如果s和t之間的最短距離小于閾值的話,則滿足距離連接的條件。具體的拓展方式如下采用雙向拓展的方式,正向拓展從所有的源結(jié)點(diǎn)開(kāi)始,反向拓展從所有的目標(biāo)結(jié)點(diǎn)開(kāi)始,毎次拓展ー個(gè)方向,拓展的方向按照每個(gè)方向新拓展出來(lái)的結(jié)點(diǎn)數(shù)目進(jìn)行選擇,每次選擇結(jié)點(diǎn)數(shù)目較少的方向進(jìn)行拓展。由于正向拓展與反向拓展的原理一致,下面以正向拓展為例進(jìn)行描述。首先初始化所有的源結(jié)點(diǎn)S,初始化為s-> (S,O, O),將所有的源結(jié)點(diǎn)加入到已訪問(wèn)結(jié)點(diǎn)集合中。然后開(kāi)始迭代拓展,第一次拓展所有的源結(jié)點(diǎn),將拓展出來(lái)的結(jié)點(diǎn)加入到已訪問(wèn)結(jié)點(diǎn)集合中??紤]第f次拓展,需要拓展當(dāng)前已訪問(wèn)結(jié)點(diǎn)集中未完成拓展的結(jié)點(diǎn),為了減少搜索的空間,本專利并沒(méi)有采用ー種拓展所有未完成結(jié)點(diǎn)的做法(寬度優(yōu)先搜索BFS的做法),而是從未完成拓展的結(jié)點(diǎn)中選出一部分進(jìn)行拓展。具體選擇哪些結(jié)點(diǎn)進(jìn)行拓展需要滿足如下兩個(gè)條件①該結(jié)點(diǎn)未完成拓展,即efO ;②該結(jié)點(diǎn)到源結(jié)點(diǎn)s的距離 小于等于ー個(gè)給定的值,該給定的值等于(f_l)乘以et,其中f是當(dāng)前正向拓展的次數(shù),et是用戶需要設(shè)定的拓展閾值。同時(shí)滿足上述兩個(gè)條件的結(jié)點(diǎn)才會(huì)被拓展,拓展的時(shí)候每個(gè)結(jié)點(diǎn)沿著各自的邊拓展新的結(jié)點(diǎn),注意拓展出來(lái)的結(jié)點(diǎn)可能會(huì)有重復(fù),不如兩個(gè)結(jié)點(diǎn)u-> (sl, costl, O)和 v-> (sl, cost2, O)同時(shí)都拓展到結(jié)點(diǎn) w,分別得到 w_> (sl, cost3, O)和w-> (si, cost4, 0),此時(shí)只需要將帶有cost較小(不妨設(shè)cost3〈=cost4)的記錄加入到已訪問(wèn)結(jié)點(diǎn)。注意,如果已訪問(wèn)的結(jié)點(diǎn)中已經(jīng)存在一條記錄w->(sl, cost, I),如果cost大于新拓展的cost3,用新拓展的記錄替換原來(lái)的記錄即可。簡(jiǎn)單來(lái)說(shuō),對(duì)于每個(gè)源結(jié)點(diǎn)S,每個(gè)拓展出來(lái)的結(jié)點(diǎn)只需要保留具有最小cost的那條記錄即可。這樣我們可以把拓展分為兩步首先拓展所有滿足條件的結(jié)點(diǎn),將新拓展得到的結(jié)點(diǎn)都加入到已訪問(wèn)結(jié)點(diǎn)集合Visited Nodes中,將Visited Nodes中剛才拓展的結(jié)點(diǎn)的拓展標(biāo)記%修改為1,表示已經(jīng)完成拓展;然后進(jìn)行去重,對(duì)于每一個(gè)源結(jié)點(diǎn)S,Visited Nodes中的結(jié)點(diǎn)u只保留具有最小cost的那條記錄,其他的記錄都刪掉。整個(gè)拓展過(guò)程可以使用如圖2所示的例子進(jìn)行說(shuō)明,該例子中使用的距離連接查詢和圖I 一祥,dt=10,用戶設(shè)置的et=5,圖3(a)表示第一次拓展,F(xiàn)°表示第I次拓展之前的已訪問(wèn)結(jié)點(diǎn)集合Visited Nodes,包含初始化的源結(jié)點(diǎn)a和b,很明顯,a和b均滿足拓展選擇條件(cost小于等于0),F(xiàn)1’表示對(duì)a和b進(jìn)行拓展之后得到的Visited Nodes,其中可能包含重復(fù)的結(jié)點(diǎn),經(jīng)過(guò)第2步去重后得到第一次拓展完成后的Visited Nodes,記為F1 ;圖3(13)所示為第二次拓展,需要滿足的拓展條件為cost小于等于(2-1) *5=5,這里只是展示了 c(b,3,0)的拓展情況,其他滿足條件的結(jié)點(diǎn)拓展結(jié)果未在圖中畫出。拓展后得到F2’,其中d和b的記錄都出現(xiàn)了重復(fù),只需要保留cost最小的那條記錄,多余的記錄從Visited Nodes中刪掉,最后得到F2。拓展的過(guò)程中我們還可以使用給定的距離閾值dt進(jìn)行剪枝,實(shí)際上對(duì)于某個(gè)拓展的結(jié)點(diǎn),如果其cost大于dt,那么該結(jié)點(diǎn)不需要被拓展到Visited Nodes中,因?yàn)楦鶕?jù)它得到的最終路徑長(zhǎng)度肯定超過(guò)dt,不滿足距離連接的條件。為了獲得更好的剪枝條件,本專利采用了一種動(dòng)態(tài)閾值的剪枝策略,不是使用距離閾值dt來(lái)進(jìn)行剪枝,而是隨著拓展的進(jìn)行,用來(lái)剪枝的動(dòng)態(tài)閾值會(huì)逐漸減小,這樣剪枝效率更高。動(dòng)態(tài)閾值剪枝的思路如下每一次正向拓展之后,到源結(jié)點(diǎn)s已經(jīng)拓展的距離都會(huì)上升,給定距離連接查詢的閾值dt,到源結(jié)點(diǎn)s的距離上升意味著后續(xù)還需要拓展的距離減小,因?yàn)椴樵冎恍枰祷卦陂撝礵t內(nèi)的點(diǎn)對(duì)。這樣,本發(fā)明在毎次拓展之后,都會(huì)統(tǒng)計(jì)當(dāng)前所有源結(jié)點(diǎn)s已經(jīng)拓展的最小距離s. I,這樣還需要拓展的距離即為dt減s. I。使用dt減s. I而不是dt可以達(dá)到更好的剪枝效率。本發(fā)明將這些動(dòng)態(tài)閾值的信息存儲(chǔ)在拓展范圍FStat和BStat集合中,如圖2所示,在拓展的時(shí)候就可以利用這些信息建立原結(jié)點(diǎn)和目標(biāo)結(jié)點(diǎn)的拓展范圍,從而減小搜索的空間。對(duì)于每一個(gè)源結(jié)點(diǎn)S,關(guān)聯(lián)ー個(gè)拓展下界和拓展上界,下界s. I記錄當(dāng)前s拓展的距離,上界s. U記錄當(dāng)前S還可以拓展的距離,cost超過(guò)S. U的結(jié)點(diǎn)不需要被拓展。同理,姆ー個(gè)目標(biāo)結(jié)點(diǎn)t也關(guān)聯(lián)t. I和t. u,記錄反向拓展的情況。S. I等于當(dāng)前拓展完成的最大距離,t. U等于當(dāng)前已訪問(wèn)結(jié)點(diǎn)集合中S關(guān)聯(lián)的未完成拓展的結(jié)點(diǎn)中最小的cost,拿圖3的例子來(lái)說(shuō),a. I初始化為O,第一次拓展之后修改為I,因?yàn)镕1中a關(guān)聯(lián)的記錄有4條,其中未完成拓展的結(jié)點(diǎn)有b、C、e,它們中最小的cost為I。通過(guò)同樣的方法,我們可以得 到t. I。接著再看s. u和t. u的計(jì)算方法,如果源結(jié)點(diǎn)s當(dāng)前到所有目標(biāo)結(jié)點(diǎn)t的最短距離都小于距離閾值dt,那么s. u為0,意味著該源結(jié)點(diǎn)s已經(jīng)不需要再繼續(xù)進(jìn)行拓展了 ;否則s. u等于距離閾值dt減去所有目標(biāo)節(jié)點(diǎn)t中最小的t. I。通過(guò)同樣的方法,我們可以得到t. U。仍然以圖3中的拓展為例,第一次拓展后a. I和b. I均為I,對(duì)應(yīng)的a. u和b. u就都等于10-1=9。得到動(dòng)態(tài)閾值之后,本專利在拓展的時(shí)候,將cost超過(guò)s. u和t. u的結(jié)點(diǎn)都忽略掉,不會(huì)加入已訪問(wèn)的結(jié)點(diǎn)集合中,這樣可以減小捜索的空間。動(dòng)態(tài)閾值的信息存儲(chǔ)在拓展范圍FStat和BStat集合中,如圖2所示。為了進(jìn)一步減小方法的迭代次數(shù),本發(fā)明采用了一種叫做Segment的索引具體 ロ丁參見(jiàn) J. Gao, R. Jin, J. Zhou, J. Xu, X. Jiang, and T. Wang. Relational approacn forshortest path discovery over large graphs. PVLDB, 5 (4) : 358-369, 2012.的做法,來(lái)カロ速拓展,Segment索引的基本思路是在原圖中加入ー些邊,這些新增的邊將原圖中的多條邊合并成一條邊,新增邊的權(quán)重等于多條邊的權(quán)重之和。這樣在拓展的時(shí)候就可以一次拓展多條邊,減小方法的迭代次數(shù)。在Hadoop的實(shí)現(xiàn)過(guò)程中,本專利提供了兩種不同的方式來(lái)實(shí)現(xiàn)上述拓展過(guò)程,一種稱為主動(dòng)拓展,另ー種稱為按需拓展。在Hadoop的實(shí)現(xiàn)中,已經(jīng)拓展的結(jié)點(diǎn)存儲(chǔ)在單獨(dú)的文件已訪問(wèn)結(jié)點(diǎn)中,而拓展所需要的邊則存儲(chǔ)在文件原圖中,主動(dòng)拓展采取的方式是將已訪問(wèn)結(jié)點(diǎn)和原圖同時(shí)進(jìn)行Map,將結(jié)點(diǎn)id作為key,這樣同一個(gè)拓展結(jié)點(diǎn)和該結(jié)點(diǎn)的鄰接表會(huì)被shuffle到同一個(gè)Reduce中,然后Reduce再完成對(duì)姆個(gè)滿足條件結(jié)點(diǎn)的拓展,將結(jié)果輸出到新的已訪問(wèn)結(jié)點(diǎn)中。拓展過(guò)程中的去重在下一次拓展的Reduce過(guò)程中進(jìn)行,只要不對(duì)同一個(gè)結(jié)點(diǎn)重復(fù)進(jìn)行拓展即可。下圖4展示了主動(dòng)拓展實(shí)現(xiàn)中的數(shù)據(jù)流,使用的例子為圖3中所示的第二次拓展,實(shí)現(xiàn)過(guò)程中使用動(dòng)態(tài)閾值進(jìn)行剪枝。按需拓展不需要對(duì)原圖進(jìn)行Map,我們預(yù)先為原圖建立索引(MapFile),這樣在拓展的過(guò)程中就不需要對(duì)整個(gè)原圖文件進(jìn)行Map 了,只需要根據(jù)索引獲取對(duì)應(yīng)結(jié)點(diǎn)的連接表即可。具體的拓展過(guò)程如下對(duì)已訪問(wèn)結(jié)點(diǎn)進(jìn)行Map,結(jié)點(diǎn)id作為key,這樣Reduce的時(shí)侯,只有已拓展的結(jié)點(diǎn),沒(méi)有該結(jié)點(diǎn)關(guān)聯(lián)的邊,我們通過(guò)索引,根據(jù)結(jié)點(diǎn)id直接從MapFile文件中讀取對(duì)應(yīng)結(jié)點(diǎn)的鄰接表即可。由于索引的存在,隨機(jī)讀取的效率也會(huì)比較高。圖4中所示的例子使用按需拓展實(shí)現(xiàn)的數(shù)據(jù)流圖如圖5所示。2. 3結(jié)果收集模塊拓展之后需要進(jìn)行結(jié)果收集,即計(jì)算源結(jié)點(diǎn)與目標(biāo)結(jié)點(diǎn)毎次拓展之后當(dāng)前的最短距離,由于正向拓展的結(jié)點(diǎn)與反向拓展的結(jié)點(diǎn)是分開(kāi)處理的,因此我們需要額外的工作來(lái)計(jì)算當(dāng)前的最短距離。一種簡(jiǎn)單的計(jì)算兩個(gè)結(jié)點(diǎn)s與t最短距離的方式如下對(duì)于同時(shí)出現(xiàn)在從s開(kāi)始正向拓展得到的結(jié)點(diǎn)集合,以及從t開(kāi)始反向拓展的得到的結(jié)點(diǎn)集合中的結(jié)點(diǎn),將它們的COStf和COStb相加,取最小的一個(gè)即為當(dāng)前拓展得到的S和t之間的最短距離。實(shí)際上,為了減小計(jì)算代價(jià),本專利采取了一種迭代計(jì)算的方式,每一次迭代之后,得到的已訪問(wèn)結(jié)點(diǎn)集合Ff可以分為轉(zhuǎn)和村,其中巧表示已經(jīng)完成拓展的結(jié)點(diǎn),也就是標(biāo)記eO=l的結(jié)點(diǎn),對(duì)則表示未完成拓展的結(jié)點(diǎn),標(biāo)記e0=0。這樣最短距離的計(jì)算可以簡(jiǎn)化·拓展之前初始化s和t的最短距離為正無(wú)窮大,接著開(kāi)始拓展,第f+Ι次正向拓展得到Ff+1,此時(shí)已經(jīng)進(jìn)行了 b次反向拓展,得到Bb,此時(shí)不需要對(duì)所有Ff+1和Bb中的結(jié)點(diǎn)進(jìn)行計(jì)算(按照簡(jiǎn)單的方法計(jì)算同時(shí)出現(xiàn)在兩個(gè)集合中的結(jié)點(diǎn)),只需要計(jì)算If 和中同時(shí)出現(xiàn)的結(jié)點(diǎn)即可,將他們的COStf和COStb相加,得到最小的ー個(gè),然后與之前計(jì)算出來(lái)的最短距離進(jìn)行比較,取較小的值作為當(dāng)前最短距離即可。這ー結(jié)果收集過(guò)程也是使用Hadoop任務(wù)來(lái)實(shí)現(xiàn)的,實(shí)現(xiàn)如下將當(dāng)前正向和反向拓展得到的Ff和Bb作為Map的輸入,輸出θ(ι或θι為O的記錄,將拓展結(jié)點(diǎn)id作為key,s或t以及cost作為value輸出,這樣在Reduce的時(shí)候處理姆ー個(gè)拓展結(jié)點(diǎn)即可,如果該拓展結(jié)點(diǎn)同時(shí)關(guān)聯(lián)源結(jié)點(diǎn)s’和目標(biāo)結(jié)點(diǎn)t’,則輸出s’和t’的距離。最后再掃描輸出文件,得到s’和t’的最小值即可。為了減小掃描文件的大小,本專利在實(shí)現(xiàn)的時(shí)候,每個(gè)Reduce在close O函數(shù)里面對(duì)該Reduce的結(jié)果進(jìn)行了過(guò)濾,保證姆個(gè)Reduce的輸出沒(méi)有重復(fù),只輸出多個(gè)距離中最小的那個(gè)值。這樣輸出文件就會(huì)比較小,減少最后掃描輸出文件的時(shí)間。2. 4終止模塊終止模塊負(fù)責(zé)判斷迭代是否可以終止,本專利的終止條件為每次迭代得到的拓展結(jié)點(diǎn)的數(shù)目大于0,如果結(jié)點(diǎn)數(shù)目大于0,則需要繼續(xù)進(jìn)行拓展,否則數(shù)目等于O的時(shí)候,即可終止拓展,說(shuō)明當(dāng)前的迭代ー個(gè)結(jié)點(diǎn)都沒(méi)有拓展,在動(dòng)態(tài)閾值的限制條件下,一個(gè)結(jié)點(diǎn)都沒(méi)有拓展說(shuō)明拓展已經(jīng)完成,接著拓展也不會(huì)對(duì)現(xiàn)有的連接結(jié)果有所改變。2. 5實(shí)現(xiàn)選擇模塊實(shí)現(xiàn)選擇模塊負(fù)責(zé)為路徑拓展模塊選擇具體的實(shí)現(xiàn)方式,上文介紹路徑拓展模塊時(shí),介紹了兩種不同的Hadoop任務(wù)實(shí)現(xiàn)方式主動(dòng)拓展方式和按需拓展方式。一般來(lái)說(shuō),在拓展的初始結(jié)點(diǎn),每次拓展的結(jié)點(diǎn)數(shù)目比較少,這樣采取按需拓展的實(shí)現(xiàn)方式可能會(huì)好一些。因?yàn)橐话銇?lái)說(shuō),需要處理的圖很大,也就是原圖文件很大,如果使用主動(dòng)拓展方式,需要對(duì)原圖文件進(jìn)行Map,這會(huì)導(dǎo)致很大的開(kāi)銷。而使用按需拓展方式則不需要對(duì)原圖文件進(jìn)行Map,同時(shí)讀取鄰接表的次數(shù)也不多,代價(jià)會(huì)比較低。當(dāng)拓展進(jìn)行了一段時(shí)間之后,需要拓展的結(jié)點(diǎn)數(shù)目變得很大,如果仍然使用按需拓展,則需要為很多結(jié)點(diǎn)讀取鄰接表,導(dǎo)致大量的磁盤10,效率會(huì)變差。此時(shí)使用主動(dòng)拓展的方式會(huì)比較好。當(dāng)拓展進(jìn)行的尾聲的時(shí)候,動(dòng)態(tài)閾值的剪枝作用會(huì)導(dǎo)致可拓展的結(jié)點(diǎn)數(shù)目變少,這樣回過(guò)頭來(lái)使用按需拓展可以達(dá)到更好的效率。在本專利中,我們將Hadoop作為ー個(gè)黑盒,利用ー些外部運(yùn)行得到的參數(shù),訓(xùn)練出一個(gè)代價(jià)模型,然后根據(jù)該模型為每一次迭代拓展選擇使用何種實(shí)現(xiàn)方式。對(duì)于每一個(gè)Hadoop任務(wù),我們提取ー些有關(guān)其運(yùn)行時(shí)負(fù)載的參數(shù),然后測(cè)試使用兩種不同的拓展方式實(shí)現(xiàn)該任務(wù)每ー步的時(shí)間代價(jià),這樣就可以得到每一次迭代那種實(shí)現(xiàn)方式使用的時(shí)間更少,將時(shí)間少的方式作為分類的類標(biāo)記。在有足夠的測(cè)試樣例的情況下,我們可以使用這些記錄訓(xùn)練出ー個(gè)分類器(可以選擇SVM或其他分類器方法),將該分類器作為代價(jià)模型對(duì)后續(xù)任務(wù)每次迭代的實(shí)現(xiàn)方式進(jìn)行選擇。這種方式具有如下一些好處不需要分析復(fù)雜的任務(wù)執(zhí)行流程,維護(hù)比較容易,而且加入新的特性也很容易整合。本專利選擇作為訓(xùn)練特征的參數(shù)如下①圖本身的特征,包括結(jié)點(diǎn)數(shù)、邊數(shù)以及平均度數(shù)順序掃描與直接通過(guò)MapFile索引訪問(wèn)文件的代價(jià)比率當(dāng)前滿足拓展條件 的拓展結(jié)點(diǎn)數(shù)目,包括去重之前和之后的兩種情況;(!)當(dāng)前已訪問(wèn)結(jié)點(diǎn)的數(shù)目。使用該代價(jià)模型可以提高查詢效果,如圖6所示,橫坐標(biāo)代表查詢時(shí)間,橫坐標(biāo)代表數(shù)據(jù)集,在圖6中選用 Iivejournal 和 Twitter 數(shù)據(jù)集。
權(quán)利要求
1.基于MapReduce的大圖上距離連接查詢方法,其步驟包括 1)提取初始化的查詢參數(shù)原圖、已訪問(wèn)結(jié)點(diǎn)、拓展范圍和查詢結(jié)果; 2)在hadoop上對(duì)原圖進(jìn)行雙向拓展,拓展從源結(jié)點(diǎn)集合和目標(biāo)結(jié)點(diǎn)集合開(kāi)始,每次拓展基于代價(jià)模型選擇執(zhí)行方式,采用動(dòng)態(tài)閾值剪枝操作,將新拓展的結(jié)點(diǎn)加入已訪問(wèn)結(jié)點(diǎn)集合; 3)繼續(xù)遍歷未完成拓展的剩余結(jié)點(diǎn),直到所有滿足拓展范圍的結(jié)點(diǎn)都完成拓展; 4)完成迭代后,記錄所述已訪問(wèn)節(jié)點(diǎn)集合中目標(biāo)結(jié)點(diǎn)和源結(jié)點(diǎn)間路徑查詢結(jié)果,返回查詢結(jié)果。
2.如權(quán)利要求I所述的基于MapReduce的大圖上距離連接查詢方法,其特征在于,所述動(dòng)態(tài)閥值剪枝操作為對(duì)每一次正向或反向拓展,設(shè)定距離連接查詢的閾值;在進(jìn)行拓展時(shí)統(tǒng)計(jì)已訪問(wèn)結(jié)點(diǎn)集合中與源結(jié)點(diǎn)或目標(biāo)結(jié)點(diǎn)間最小距離,更新閥值并對(duì)所述結(jié)點(diǎn)進(jìn)行剪枝拓展。
3.如權(quán)利要求2所述的基于MapReduce的大圖上距離連接查詢方法,其特征在于,動(dòng)態(tài)閾值的信息存儲(chǔ)在拓展范圍FStat和BStat集合中。
4.如權(quán)利要求I所述的基于MapReduce的大圖上距離連接查詢方法,其特征在于,在拓展操作時(shí)使用Segment索引。
5.如權(quán)利要求I所述的基于MapReduce的大圖上距離連接查詢方法,其特征在于,每次拓展操作基于代價(jià)模型選擇使用主動(dòng)拓展或按需拓展的方式進(jìn)行結(jié)點(diǎn)迭代拓展。
6.如權(quán)利要求5所述的基于MapReduce的大圖上距離連接查詢方法,其特征在于,所述代價(jià)模型基于Hadoop構(gòu)建,訓(xùn)練特征參數(shù)包括1)原圖自身特性;2)順序掃描和索引訪問(wèn)的代價(jià)比率;3)滿足拓展范圍的結(jié)點(diǎn)數(shù)目;4)已訪問(wèn)結(jié)點(diǎn)數(shù)目。
7.如權(quán)利要求5所述的基于MapReduce的大圖上距離連接查詢方法,其特征在于,所述主動(dòng)拓展為,對(duì)已訪問(wèn)結(jié)點(diǎn)和原圖同時(shí)進(jìn)行Map操作,得到的結(jié)果進(jìn)行Reduce操作,完成對(duì)每個(gè)滿足條件結(jié)點(diǎn)的拓展并將結(jié)果輸出到新的已訪問(wèn)結(jié)點(diǎn)集合中。
8.如權(quán)利要求5所述的基于MapReduce的大圖上距離連接查詢方法,其特征在于,所述按需拓展為,擴(kuò)展前為原圖建立索引MapFile文件,擴(kuò)展過(guò)程中對(duì)已訪問(wèn)結(jié)點(diǎn)進(jìn)行Map操作,結(jié)果進(jìn)行Reduce操作,根據(jù)MapFile索引獲取對(duì)應(yīng)結(jié)點(diǎn)的鄰接表,完成對(duì)每個(gè)滿足條件結(jié)點(diǎn)的拓展并將結(jié)果輸出到新的已訪問(wèn)結(jié)點(diǎn)集合中。
9.如權(quán)利要求I所述的基于MapReduce的大圖上距離連接查詢方法,其特征在于,每進(jìn)行一次拓展之后,都需要對(duì)當(dāng)前結(jié)果進(jìn)行更新,保證目標(biāo)結(jié)點(diǎn)和源結(jié)點(diǎn)間的距離查詢值為當(dāng)前最小。
10.如權(quán)利要求I所述的基于MapReduce的大圖上距離連接查詢方法,其特征在于,原圖、已訪問(wèn)結(jié)點(diǎn)、拓展范圍和查詢結(jié)果是查詢中間參數(shù),儲(chǔ)存在hadoop文件系統(tǒng)HDFS中;所述原圖G按照鄰接表的方式進(jìn)行存儲(chǔ);所述已訪問(wèn)結(jié)點(diǎn)、拓展范圍和查詢結(jié)果按照key->value的形式進(jìn)行存儲(chǔ)。
全文摘要
本發(fā)明公開(kāi)了一種基于MapReduce的大圖上距離連接查詢方法,其步驟包括1)提取初始化的查詢參數(shù):原圖、已訪問(wèn)結(jié)點(diǎn)、拓展范圍和查詢結(jié)果;2)在hadoop上對(duì)原圖進(jìn)行雙向拓展,拓展從源結(jié)點(diǎn)集合和目標(biāo)結(jié)點(diǎn)集合開(kāi)始,每次拓展基于代價(jià)模型,采用動(dòng)態(tài)閾值剪枝操作,將新拓展的結(jié)點(diǎn)加入已訪問(wèn)結(jié)點(diǎn)集合;3)繼續(xù)遍歷未完成拓展的剩余結(jié)點(diǎn),直到所有滿足拓展范圍的結(jié)點(diǎn)都完成拓展;4)完成迭代后,記錄所述已訪問(wèn)節(jié)點(diǎn)集合中目標(biāo)結(jié)點(diǎn)和源結(jié)點(diǎn)間路徑查詢結(jié)果,返回查詢結(jié)果。本發(fā)明在MapReduce環(huán)境下提出了一種基于代價(jià)模型的自適應(yīng)方法,基于動(dòng)態(tài)閾值進(jìn)行剪枝的雙向搜索算法和Segment索引減少拓展空間和迭代次數(shù),提高任務(wù)的執(zhí)行效率。
文檔編號(hào)G06F17/30GK102737114SQ20121015746
公開(kāi)日2012年10月17日 申請(qǐng)日期2012年5月18日 優(yōu)先權(quán)日2012年5月18日
發(fā)明者周家?guī)? 唐世渭, 楊冬青, 王騰蛟, 王衎, 高軍 申請(qǐng)人:北京大學(xué)