一種大規(guī)模圖結(jié)構(gòu)數(shù)據(jù)處理方法、裝置和系統(tǒng)的制作方法
【專利摘要】本發(fā)明公開了一種大規(guī)模圖結(jié)構(gòu)數(shù)據(jù)處理方法、裝置和系統(tǒng),以提高數(shù)據(jù)計(jì)算效率并增強(qiáng)系統(tǒng)運(yùn)行的可靠性。所述方法包括:從節(jié)點(diǎn)將圖結(jié)構(gòu)數(shù)據(jù)讀取至內(nèi)存;對(duì)內(nèi)存中的圖結(jié)構(gòu)數(shù)據(jù)進(jìn)行預(yù)處理,得到圖結(jié)構(gòu)數(shù)據(jù)中相鄰頂點(diǎn)處于同一數(shù)據(jù)片的至少一個(gè)數(shù)據(jù)片;將預(yù)處理所得至少一個(gè)數(shù)據(jù)片映射至從節(jié)點(diǎn);從節(jié)點(diǎn)采用迭代算法對(duì)映射至從節(jié)點(diǎn)的數(shù)據(jù)片進(jìn)行計(jì)算。由于相鄰頂點(diǎn)的信息映射至同一從節(jié)點(diǎn)而不是不同從節(jié)點(diǎn),如此,從節(jié)點(diǎn)采用迭代算法對(duì)映射至從節(jié)點(diǎn)的數(shù)據(jù)片進(jìn)行計(jì)算時(shí),無(wú)需與其他從節(jié)點(diǎn)進(jìn)行通信,由此減少了通信量,降低對(duì)集群內(nèi)帶寬資源的需求,并且提高了集群系統(tǒng)及其節(jié)點(diǎn)的計(jì)算效率。
【專利說明】一種大規(guī)模圖結(jié)構(gòu)數(shù)據(jù)處理方法、裝置和系統(tǒng)
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及分布式計(jì)算領(lǐng)域,具體涉及一種大規(guī)模圖結(jié)構(gòu)數(shù)據(jù)處理方法、裝置和系統(tǒng)。
【背景技術(shù)】
[0002]圖(Graph)是一種由頂點(diǎn)的集合和頂點(diǎn)之間的關(guān)聯(lián)關(guān)系即邊的集合共同形成的數(shù)據(jù)結(jié)構(gòu)。圖也可以稱之為網(wǎng)絡(luò),實(shí)際應(yīng)用中很多結(jié)構(gòu)都可以轉(zhuǎn)化為圖的方式表達(dá)出來(lái),例如,矩陣,其每一行每一列對(duì)應(yīng)一個(gè)頂點(diǎn),行與列的交叉處其值不為零時(shí)認(rèn)為有邊存在,而邊的權(quán)重為該值的大??;再如,城市地圖,每一個(gè)城市(或居民地址)為一個(gè)頂點(diǎn),不同城市(或居民地址)之間相連的路線稱之為邊。圖結(jié)構(gòu)是一種抽象數(shù)據(jù)結(jié)構(gòu),是對(duì)象(頂點(diǎn)、節(jié)點(diǎn))及其關(guān)系(邊)的模型?,F(xiàn)實(shí)世界中,圖結(jié)構(gòu)數(shù)據(jù)的分布十分普遍,例如,社交網(wǎng)絡(luò)中用戶之間的關(guān)系,蛋白質(zhì)結(jié)構(gòu)關(guān)聯(lián)關(guān)系,科技文獻(xiàn)體反映出的科學(xué)家之間的協(xié)作關(guān)系,以及因特網(wǎng)(Internet)中以超鏈接體現(xiàn)出的網(wǎng)頁(yè)之間的關(guān)系等等,這些都可以直接或間接地轉(zhuǎn)化圖結(jié)構(gòu)這一類數(shù)據(jù)結(jié)構(gòu)。以頂點(diǎn)和邊共同構(gòu)成的集合組成的圖結(jié)構(gòu)一般可以真實(shí)貼近的表達(dá)現(xiàn)實(shí)世界中的真實(shí)關(guān)聯(lián)關(guān)系。對(duì)圖結(jié)構(gòu)數(shù)據(jù)的挖掘一般在識(shí)別對(duì)象關(guān)系模式、結(jié)構(gòu)、檢測(cè)異常等等,并且,對(duì)圖結(jié)構(gòu)數(shù)據(jù)的分析與挖掘是當(dāng)前的一個(gè)熱點(diǎn),高效率地處理大規(guī)模數(shù)據(jù)有著十分迫切的需求。當(dāng)前的有效方法一般建立在大規(guī)模處理平臺(tái)之上,構(gòu)建一個(gè)適應(yīng)圖結(jié)構(gòu)數(shù)據(jù)特性易擴(kuò)展的平臺(tái)框架是一個(gè)可取的技術(shù)方向。
[0003]與圖結(jié)構(gòu)數(shù)據(jù)相關(guān)的計(jì)算具有特別的性質(zhì),一般對(duì)圖的計(jì)算算法需要對(duì)頂點(diǎn)與邊直接執(zhí)行讀寫操作,這使得單個(gè)點(diǎn)的計(jì)算對(duì)全局?jǐn)?shù)據(jù)的依賴。若采用傳統(tǒng)的方法直接計(jì)算,伴隨圖中頂點(diǎn)與邊的規(guī)模的增長(zhǎng),則運(yùn)算耗時(shí)會(huì)達(dá)到不能忍耐的程度。雖然分布式系統(tǒng)的普及為大規(guī)模數(shù)據(jù)處理帶來(lái)了可能性,然而,若直接采用分布式計(jì)算方法設(shè)計(jì)算法,往往開發(fā)復(fù)雜度極高,使得調(diào)試、優(yōu)化非常困難。如何在分布式系統(tǒng)中高效率地處理大規(guī)模圖結(jié)構(gòu)數(shù)據(jù)仍是業(yè)界的一個(gè)挑戰(zhàn)。
[0004]現(xiàn)有的一種針對(duì)圖結(jié)構(gòu)數(shù)據(jù)處理的計(jì)算框架包括Giraph這一迭代的圖計(jì)算系統(tǒng)。Giraph基于Google于2010年發(fā)表的關(guān)于Pregel的論文的開源實(shí)現(xiàn),從計(jì)算模型而言,是基于批量同步并行(Bulk Synchronization Parallel, BSP)模型。BSP計(jì)算模型,是一種大規(guī)模同步并行化模型,它將計(jì)算抽象為節(jié)點(diǎn)與通信的交換網(wǎng)絡(luò)。BSP計(jì)算模型中的每一個(gè)任務(wù)分由多次迭代完成,每一次迭代為一個(gè)超級(jí)步(Superstep),其包括計(jì)算步與通信步。計(jì)算步完成算法計(jì)算任務(wù),可由開發(fā)者自定義運(yùn)算類型,而通信步完成不同進(jìn)程之間的通信過程,發(fā)送方定義接收方、消息內(nèi)容,并封裝消息發(fā)送給系統(tǒng),由系統(tǒng)送達(dá)消息。超級(jí)步內(nèi)多個(gè)進(jìn)程同時(shí)執(zhí)行,除第一個(gè)超級(jí)步外,其余超級(jí)步均先接受上一個(gè)超級(jí)步發(fā)送來(lái)的消息,然后執(zhí)行計(jì)算。
[0005]Giraph依賴于圖結(jié)構(gòu)數(shù)據(jù)的有效劃分以降低通信(主要是收發(fā)消息)量并保持負(fù)載均衡,然而,圖結(jié)構(gòu)數(shù)據(jù)的劃分是基于哈希函數(shù)的隨機(jī)劃分,因此會(huì)破壞計(jì)算的局部性。例如,Giraph需要頻繁交換其鄰接頂點(diǎn)的信息,而此時(shí)鄰接頂點(diǎn)劃分到不同機(jī)器上,因此導(dǎo)致通信量劇烈增加,嚴(yán)重降低計(jì)算效率。
【發(fā)明內(nèi)容】
[0006]本發(fā)明實(shí)施例提供一種大規(guī)模圖結(jié)構(gòu)數(shù)據(jù)處理方法、裝置和系統(tǒng),以提高數(shù)據(jù)計(jì)算效率并增強(qiáng)系統(tǒng)運(yùn)行的可靠性。
[0007]本發(fā)明實(shí)施例提供一種大規(guī)模圖結(jié)構(gòu)數(shù)據(jù)處理方法,所述方法包括:
[0008]從節(jié)點(diǎn)將圖結(jié)構(gòu)數(shù)據(jù)讀取至內(nèi)存;
[0009]對(duì)所述內(nèi)存中的圖結(jié)構(gòu)數(shù)據(jù)進(jìn)行預(yù)處理,得到所述圖結(jié)構(gòu)數(shù)據(jù)中相鄰頂點(diǎn)處于同一數(shù)據(jù)片的至少一個(gè)數(shù)據(jù)片;
[0010]將所述預(yù)處理所得至少一個(gè)數(shù)據(jù)片映射至從節(jié)點(diǎn);
[0011]所述從節(jié)點(diǎn)采用迭代算法對(duì)所述映射至所述從節(jié)點(diǎn)的數(shù)據(jù)片進(jìn)行計(jì)算。
[0012]本發(fā)明另一實(shí)施例提供一種大規(guī)模圖結(jié)構(gòu)數(shù)據(jù)處理裝置,所述裝置包括:
[0013]數(shù)據(jù)讀取單元,用于將圖結(jié)構(gòu)數(shù)據(jù)讀取至內(nèi)存;
[0014]數(shù)據(jù)預(yù)處理單元,用于對(duì)所述內(nèi)存中的圖結(jié)構(gòu)數(shù)據(jù)進(jìn)行預(yù)處理,得到所述圖結(jié)構(gòu)數(shù)據(jù)中相鄰頂點(diǎn)處于同一數(shù)據(jù)片的至少一個(gè)數(shù)據(jù)片;
[0015]映射單元,用于將所述預(yù)處理所得至少一個(gè)數(shù)據(jù)片映射至從節(jié)點(diǎn);
[0016]算法執(zhí)行單元,用于采用迭代算法對(duì)所述映射至所述從節(jié)點(diǎn)的數(shù)據(jù)片進(jìn)行計(jì)算。
[0017]本發(fā)明另一實(shí)施例提供一種大規(guī)模圖結(jié)構(gòu)數(shù)據(jù)處理系統(tǒng),所述系統(tǒng)包括至少兩個(gè)從節(jié)點(diǎn)和至少兩個(gè)主節(jié)點(diǎn),所述至少兩個(gè)主節(jié)點(diǎn)管控各自控制域內(nèi)的至少兩個(gè)從節(jié)點(diǎn);
[0018]所述至少兩個(gè)從節(jié)點(diǎn)中的任意一個(gè)從節(jié)點(diǎn)用于將圖結(jié)構(gòu)數(shù)據(jù)讀取至內(nèi)存,對(duì)所述內(nèi)存中的圖結(jié)構(gòu)數(shù)據(jù)進(jìn)行預(yù)處理,得到所述圖結(jié)構(gòu)數(shù)據(jù)中相鄰頂點(diǎn)處于同一數(shù)據(jù)片的至少一個(gè)數(shù)據(jù)片;
[0019]所述至少兩個(gè)主節(jié)點(diǎn)中的任意一個(gè)主節(jié)點(diǎn)用于將所述預(yù)處理所得至少一個(gè)數(shù)據(jù)片映射至從節(jié)點(diǎn);
[0020]所述至少兩個(gè)從節(jié)點(diǎn)中的任意一個(gè)從節(jié)點(diǎn)用于采用迭代算法對(duì)所述映射至所述從節(jié)點(diǎn)的數(shù)據(jù)片進(jìn)行計(jì)算。
[0021]從上述本發(fā)明實(shí)施例可知,經(jīng)過預(yù)處理后,圖結(jié)構(gòu)數(shù)據(jù)中相鄰頂點(diǎn)處于同一數(shù)據(jù)片,而預(yù)處理后得到的每個(gè)這種數(shù)據(jù)片是映射至一個(gè)從節(jié)點(diǎn)。由于相鄰頂點(diǎn)的信息都盡其所能地映射至同一從節(jié)點(diǎn)而不是不同從節(jié)點(diǎn),如此,對(duì)于映射至同一從節(jié)點(diǎn)的相鄰頂點(diǎn),從節(jié)點(diǎn)采用迭代算法進(jìn)行計(jì)算時(shí),無(wú)需與其他從節(jié)點(diǎn)進(jìn)行通信,由此減少了通信量(尤其是數(shù)據(jù)分片時(shí)設(shè)定的上限比較大時(shí),即使仍然有部分相鄰頂點(diǎn)的信息不能映射至同一從節(jié)點(diǎn),也能減少通信量),降低對(duì)集群內(nèi)帶寬資源的需求,并且提高了集群系統(tǒng)及其節(jié)點(diǎn)的計(jì)算效率。
【專利附圖】
【附圖說明】
[0022]圖1是本發(fā)明實(shí)施例提供的大規(guī)模圖結(jié)構(gòu)數(shù)據(jù)處理方法的基本流程示意圖;
[0023]圖2是本發(fā)明實(shí)施例提供的將圖結(jié)構(gòu)數(shù)據(jù)中相鄰頂點(diǎn)分割至同一數(shù)據(jù)片的分割示意圖;
[0024]圖3是本發(fā)明實(shí)施例提供的大規(guī)模圖結(jié)構(gòu)數(shù)據(jù)處理裝置邏輯結(jié)構(gòu)示意圖;[0025]圖4是本發(fā)明另一實(shí)施例提供的大規(guī)模圖結(jié)構(gòu)數(shù)據(jù)處理裝置邏輯結(jié)構(gòu)示意圖;
[0026]圖5_a是本發(fā)明另一實(shí)施例提供的大規(guī)模圖結(jié)構(gòu)數(shù)據(jù)處理裝置邏輯結(jié)構(gòu)示意圖;
[0027]圖5_b是本發(fā)明另一實(shí)施例提供的大規(guī)模圖結(jié)構(gòu)數(shù)據(jù)處理裝置邏輯結(jié)構(gòu)示意圖;
[0028]圖6_a是本發(fā)明另一實(shí)施例提供的大規(guī)模圖結(jié)構(gòu)數(shù)據(jù)處理裝置邏輯結(jié)構(gòu)示意圖;
[0029]圖6_b是本發(fā)明另一實(shí)施例提供的大規(guī)模圖結(jié)構(gòu)數(shù)據(jù)處理裝置邏輯結(jié)構(gòu)示意圖;
[0030]圖7是本發(fā)明實(shí)施例提供的大規(guī)模圖結(jié)構(gòu)數(shù)據(jù)處理系統(tǒng)邏輯結(jié)構(gòu)示意圖。
【具體實(shí)施方式】
[0031]本發(fā)明實(shí)施例提供一種大規(guī)模圖結(jié)構(gòu)數(shù)據(jù)處理方法,包括:從節(jié)點(diǎn)將圖結(jié)構(gòu)數(shù)據(jù)讀取至內(nèi)存;對(duì)所述內(nèi)存中的圖結(jié)構(gòu)數(shù)據(jù)進(jìn)行預(yù)處理,得到所述圖結(jié)構(gòu)數(shù)據(jù)中相鄰頂點(diǎn)處于同一數(shù)據(jù)片的至少一個(gè)數(shù)據(jù)片;將所述預(yù)處理所得至少一個(gè)數(shù)據(jù)片映射至從節(jié)點(diǎn);所述從節(jié)點(diǎn)采用迭代算法對(duì)所述映射至所述從節(jié)點(diǎn)的數(shù)據(jù)片進(jìn)行計(jì)算。本發(fā)明實(shí)施例還提供相應(yīng)的一種大規(guī)模圖結(jié)構(gòu)數(shù)據(jù)處理裝置和系統(tǒng)。以下分別進(jìn)行詳細(xì)說明。
[0032]本發(fā)明實(shí)施例的大規(guī)模圖結(jié)構(gòu)數(shù)據(jù)處理方法的基本流程可參考圖1,主要包括如下步驟SlOl至步驟S104:
[0033]S101,從節(jié)點(diǎn)將圖結(jié)構(gòu)數(shù)據(jù)讀取至內(nèi)存。
[0034]本發(fā)明實(shí)施例中,從節(jié)點(diǎn)是由主控(Master)計(jì)算節(jié)點(diǎn)和從屬(Slave)計(jì)算節(jié)點(diǎn)構(gòu)成的分布式集群系統(tǒng)中的Slave計(jì)算節(jié)點(diǎn),其中,所述的計(jì)算節(jié)點(diǎn)可以是計(jì)算機(jī)或者是具有計(jì)算功能的裝置。在本發(fā)明實(shí)施例中,圖結(jié)構(gòu)數(shù)據(jù)可以存儲(chǔ)在硬盤或固態(tài)硬盤(SolidState Disk,SSD)等持久存儲(chǔ)介質(zhì)上。為執(zhí)行定制算法,從節(jié)點(diǎn)需要將存儲(chǔ)在持久存儲(chǔ)介質(zhì)上的圖結(jié)構(gòu)數(shù)據(jù)讀取到內(nèi)存(RAM)中。常用的數(shù)據(jù)存儲(chǔ)格式并不統(tǒng)一,但數(shù)據(jù)存儲(chǔ)格式并不影響對(duì)數(shù)據(jù)的操作。同時(shí),可能有用戶自定義的操作,因此讀取過程可以由用戶自定義方式,也可以采用默認(rèn)設(shè)置。具體地,首先打開指定文件,設(shè)定內(nèi)存地址,將文件內(nèi)容按行(或用戶自定義)的方式讀取到預(yù)設(shè)的位置,其中,從文件讀取到的內(nèi)容需要解析成可計(jì)算的格式。在本發(fā)明實(shí)施例中,頂點(diǎn)、邊的存儲(chǔ)格式包括:頂點(diǎn),頂點(diǎn)值,[邊,邊的值],其中,中括號(hào)表示其中的數(shù)據(jù)可出現(xiàn)零次到多次。以面向?qū)ο蟮姆椒?gòu)建頂點(diǎn)的存儲(chǔ)結(jié)構(gòu),則構(gòu)建頂點(diǎn)類,其數(shù)據(jù)存儲(chǔ)為屬性值。
[0035]S102,對(duì)內(nèi)存中的圖結(jié)構(gòu)數(shù)據(jù)進(jìn)行預(yù)處理,得到圖結(jié)構(gòu)數(shù)據(jù)中相鄰頂點(diǎn)處于同一數(shù)據(jù)片的至少一個(gè)數(shù)據(jù)片。
[0036]現(xiàn)有技術(shù)中,圖結(jié)構(gòu)數(shù)據(jù)中相鄰頂點(diǎn)可能劃分到不同計(jì)算節(jié)點(diǎn)上,由于相鄰頂點(diǎn)具有公用的邊,其中一個(gè)計(jì)算節(jié)點(diǎn)在執(zhí)行針對(duì)相鄰頂點(diǎn)中一個(gè)頂點(diǎn)的計(jì)算過程中,需要與執(zhí)行針對(duì)相鄰頂點(diǎn)中另一個(gè)頂點(diǎn)的另一計(jì)算節(jié)點(diǎn)進(jìn)行頻繁通信,以交換相鄰頂點(diǎn)的信息,如此一來(lái),導(dǎo)致分布式集群系統(tǒng)內(nèi)通信量的劇增,嚴(yán)重降低計(jì)算效率。
[0037]為了解決上述現(xiàn)有技術(shù)存在的問題,本發(fā)明實(shí)施例提供的方法并不是直接將讀取到內(nèi)存的圖結(jié)構(gòu)數(shù)據(jù)直接執(zhí)行計(jì)算,而是進(jìn)行預(yù)處理,包括:
[0038]S1021,根據(jù)圖結(jié)構(gòu)數(shù)據(jù)的結(jié)構(gòu)確定相鄰頂點(diǎn)。
[0039]根據(jù)圖結(jié)構(gòu)數(shù)據(jù)的結(jié)構(gòu)確定相鄰頂點(diǎn)是本領(lǐng)域的公知常識(shí),此處不做贅述。
[0040]S1022,以圖結(jié)構(gòu)數(shù)據(jù)中任意一個(gè)頂點(diǎn)為初始頂點(diǎn),采用廣度優(yōu)先遍歷,盡其所能地將所述圖結(jié)構(gòu)數(shù)據(jù)中相鄰頂點(diǎn)分割至同一數(shù)據(jù)片,其中,分割至同一數(shù)據(jù)片中的頂點(diǎn)數(shù)量以預(yù)設(shè)值為上限。
[0041]廣度優(yōu)先遍歷屬于本領(lǐng)域公知常識(shí),這里不做贅述,此處主要對(duì)如何將圖結(jié)構(gòu)數(shù)據(jù)中相鄰頂點(diǎn)分割至同一數(shù)據(jù)片進(jìn)行說明,請(qǐng)參閱附圖2。對(duì)于附圖2示例的圖結(jié)構(gòu)數(shù)據(jù),在圖中隨機(jī)選擇一個(gè)頂點(diǎn)作為廣度優(yōu)先遍歷的初始頂點(diǎn),如附圖2中的黑色頂點(diǎn)作為遍歷的初始頂點(diǎn)。從該初始頂點(diǎn)開始進(jìn)行廣度優(yōu)先遍歷,直到所遍歷到的頂點(diǎn)數(shù)量達(dá)到一個(gè)預(yù)設(shè)值(該預(yù)設(shè)值可采用默認(rèn)值,也可由用戶設(shè)定)為止。以頂點(diǎn)數(shù)量達(dá)到所述預(yù)設(shè)值時(shí)所遍歷的一個(gè)頂點(diǎn)以及之前遍歷的頂點(diǎn)(包括初始頂點(diǎn))作為一個(gè)數(shù)據(jù)片,從原圖結(jié)構(gòu)數(shù)據(jù)分割開來(lái),分割該數(shù)據(jù)片的分割曲線如附圖2中的曲線所示。任取分割曲線另一側(cè)的一個(gè)頂點(diǎn)作為下次迭代的起點(diǎn),重復(fù)以上分割方法,直至所有頂點(diǎn)均已分割到某一個(gè)數(shù)據(jù)片中為止。需要說明的是,對(duì)于有向圖,每個(gè)頂點(diǎn)僅保存以其為起始頂點(diǎn)的邊。進(jìn)一步地,為保證分割后的數(shù)據(jù)片能夠具有計(jì)算時(shí)的良好的局部性,對(duì)每個(gè)數(shù)據(jù)片中的頂點(diǎn)單獨(dú)編號(hào)建立索引,如此,可以直接由頂點(diǎn)信息映射到對(duì)應(yīng)的數(shù)據(jù)片,建立快捷查詢機(jī)制。
[0042]在上述預(yù)處理方法中,為保證分割的一致性即同一頂點(diǎn)不同時(shí)出現(xiàn)在不同的數(shù)據(jù)片中,針對(duì)大規(guī)模圖結(jié)構(gòu)數(shù)據(jù),可以讓多個(gè)Slave計(jì)算節(jié)點(diǎn)同時(shí)執(zhí)行數(shù)據(jù)預(yù)處理。圖結(jié)構(gòu)數(shù)據(jù)依其鄰接性進(jìn)行編號(hào),然后依據(jù)編號(hào)將數(shù)據(jù)分配到不同的Slave計(jì)算節(jié)點(diǎn)上。采用前述預(yù)處理中的數(shù)據(jù)片分割方法,每個(gè)Slave計(jì)算節(jié)點(diǎn)進(jìn)一步分割接收到的數(shù)據(jù)塊,以分割成可獨(dú)立處理的數(shù)據(jù)片。
[0043]由于經(jīng)過預(yù)處理后圖結(jié)構(gòu)數(shù)據(jù)中相鄰頂點(diǎn)處于同一數(shù)據(jù)片,因此,后續(xù)將一個(gè)數(shù)據(jù)片映射至同一從節(jié)點(diǎn)后,從節(jié)點(diǎn)采用迭代算法執(zhí)行針對(duì)相鄰頂點(diǎn)的其中一個(gè)頂點(diǎn)進(jìn)行計(jì)算時(shí),無(wú)需與其他從節(jié)點(diǎn)進(jìn)行通信獲知該相鄰頂點(diǎn)中另一頂點(diǎn)的信息,由此減少了通信量。
[0044]S103,將預(yù)處理所得至少一個(gè)數(shù)據(jù)片映射至從節(jié)點(diǎn)。
[0045]在本發(fā)明實(shí)施例中,為了保證系統(tǒng)的魯棒性,可以將所述預(yù)處理所得至少一個(gè)數(shù)據(jù)片中同一數(shù)據(jù)片映射至由同一主節(jié)點(diǎn)管控的控制域內(nèi)至少兩個(gè)從節(jié)點(diǎn),由該主節(jié)點(diǎn)決定選擇其中一個(gè)從節(jié)點(diǎn)作為執(zhí)行節(jié)點(diǎn)執(zhí)行計(jì)算任務(wù)。若該從節(jié)點(diǎn)在執(zhí)行計(jì)算過程中出現(xiàn)異?;蝈e(cuò)誤,則可以選擇另一從節(jié)點(diǎn)繼續(xù)執(zhí)行計(jì)算,如此,保證了系統(tǒng)運(yùn)行的穩(wěn)定。
[0046]S104,從節(jié)點(diǎn)采用迭代算法對(duì)映射至從節(jié)點(diǎn)的數(shù)據(jù)片進(jìn)行計(jì)算。
[0047]相應(yīng)于步驟S103中將預(yù)處理所得至少一個(gè)數(shù)據(jù)片映射至從節(jié)點(diǎn)的一個(gè)實(shí)施例,即,將預(yù)處理所得至少一個(gè)數(shù)據(jù)片中同一數(shù)據(jù)片映射至由同一主節(jié)點(diǎn)管控的控制域內(nèi)至少兩個(gè)從節(jié)點(diǎn),作為從節(jié)點(diǎn)采用迭代算法對(duì)映射至從節(jié)點(diǎn)的數(shù)據(jù)片進(jìn)行計(jì)算的一個(gè)實(shí)施例,可以是至少兩個(gè)從節(jié)點(diǎn)中任意一個(gè)從節(jié)點(diǎn)采用迭代算法對(duì)映射至從節(jié)點(diǎn)的數(shù)據(jù)片進(jìn)行計(jì)算
[0048]為了減少分布式集群系統(tǒng)內(nèi)節(jié)點(diǎn)間通信量,降低通信延遲,在本發(fā)明實(shí)施例中,上述方法還包括:協(xié)調(diào)圖結(jié)構(gòu)數(shù)據(jù)讀取、預(yù)處理、映射和數(shù)據(jù)片計(jì)算過程中主節(jié)點(diǎn)與主節(jié)點(diǎn)之間以及主節(jié)點(diǎn)與從節(jié)點(diǎn)之間的消息傳遞,具體是采用兩層級(jí)通信機(jī)制,即主節(jié)點(diǎn)處理主節(jié)點(diǎn)與主節(jié)點(diǎn)之間以及主節(jié)點(diǎn)與從節(jié)點(diǎn)之間的通信傳輸與同步,從節(jié)點(diǎn)處理主節(jié)點(diǎn)與從節(jié)點(diǎn)之間的通信傳輸與同步。
[0049]為了保證在執(zhí)行計(jì)算的從節(jié)點(diǎn)出現(xiàn)異?;蝈e(cuò)誤時(shí),不中斷系統(tǒng)的運(yùn)行狀態(tài),在本發(fā)明實(shí)施例中,上述方法還包括:將對(duì)映射至從節(jié)點(diǎn)的數(shù)據(jù)片進(jìn)行計(jì)算時(shí)所得中間結(jié)果存儲(chǔ)至從節(jié)點(diǎn)中的持久存儲(chǔ)介質(zhì),在執(zhí)行計(jì)算的從節(jié)點(diǎn)出現(xiàn)異?;蝈e(cuò)誤時(shí),將所述中間結(jié)果重新映射至由同一主節(jié)點(diǎn)管控的控制域內(nèi)另一從節(jié)點(diǎn),由所述另一從節(jié)點(diǎn)根據(jù)所述中間結(jié)果繼續(xù)計(jì)算過程。
[0050]從上述本發(fā)明實(shí)施例提供的大規(guī)模圖結(jié)構(gòu)數(shù)據(jù)處理方法可知,經(jīng)過預(yù)處理后,圖結(jié)構(gòu)數(shù)據(jù)中相鄰頂點(diǎn)處于同一數(shù)據(jù)片,而預(yù)處理后得到的每個(gè)這種數(shù)據(jù)片是映射至一個(gè)從節(jié)點(diǎn)。由于相鄰頂點(diǎn)的信息都盡其所能地映射至同一從節(jié)點(diǎn)而不是不同從節(jié)點(diǎn),如此,對(duì)于映射至同一從節(jié)點(diǎn)的相鄰頂點(diǎn),從節(jié)點(diǎn)采用迭代算法進(jìn)行計(jì)算時(shí),無(wú)需與其他從節(jié)點(diǎn)進(jìn)行通信,由此減少了通信量(尤其是數(shù)據(jù)分片時(shí)設(shè)定的上限比較大時(shí),即使仍然有部分相鄰頂點(diǎn)的信息不能映射至同一從節(jié)點(diǎn),也能減少通信量),降低對(duì)集群內(nèi)帶寬資源的需求,并且提高了集群系統(tǒng)及其節(jié)點(diǎn)的計(jì)算效率。
[0051]下面對(duì)用于執(zhí)行上述大規(guī)模圖結(jié)構(gòu)數(shù)據(jù)處理方法的本發(fā)明實(shí)施例的大規(guī)模圖結(jié)構(gòu)數(shù)據(jù)處理裝置進(jìn)行說明,其基本邏輯結(jié)構(gòu)參考附圖3。為了便于說明,附圖3示例的大規(guī)模圖結(jié)構(gòu)數(shù)據(jù)處理裝置僅僅示出了與本發(fā)明實(shí)施例相關(guān)的部分。需要說明的是,附圖3示例的大規(guī)模圖結(jié)構(gòu)數(shù)據(jù)處理裝置中的功能單元可以由分布式集群系統(tǒng)中主控(Master)計(jì)算節(jié)點(diǎn)(以下簡(jiǎn)稱主節(jié)點(diǎn))和\或從節(jié)點(diǎn)實(shí)現(xiàn),即大規(guī)模圖結(jié)構(gòu)數(shù)據(jù)處理裝置中的功能單元既可以是主節(jié)點(diǎn)的功能單元,又可以是從節(jié)點(diǎn)的功能單元,還可以是的由主節(jié)點(diǎn)和從節(jié)點(diǎn)共同實(shí)現(xiàn)的功能單元。附圖3示例的大規(guī)模圖結(jié)構(gòu)數(shù)據(jù)處理裝置主要包括數(shù)據(jù)讀取單元301、數(shù)據(jù)預(yù)處理單元302、映射單元303和算法執(zhí)行單元304,各單元詳細(xì)說明如下:
[0052]數(shù)據(jù)讀取單元301,用于將圖結(jié)構(gòu)數(shù)據(jù)讀取至內(nèi)存。
[0053]具體地,首先打開指定文件,設(shè)定內(nèi)存地址,將文件內(nèi)容按行(或用戶自定義)的方式讀取到預(yù)設(shè)的位置,其中,從文件讀取到的內(nèi)容需要解析成可計(jì)算的格式。在本發(fā)明實(shí)施例中,頂點(diǎn)、邊的存儲(chǔ)格式包括:頂點(diǎn),頂點(diǎn)值,[邊,邊的值],其中,中括號(hào)表示其中的數(shù)據(jù)可出現(xiàn)零次到多次。以面向?qū)ο蟮姆椒?gòu)建頂點(diǎn)的存儲(chǔ)結(jié)構(gòu),則構(gòu)建頂點(diǎn)類,其數(shù)據(jù)存儲(chǔ)為屬性值。
[0054]數(shù)據(jù)預(yù)處理單元302,用于對(duì)內(nèi)存中的圖結(jié)構(gòu)數(shù)據(jù)進(jìn)行預(yù)處理,得到所述圖結(jié)構(gòu)數(shù)據(jù)中相鄰頂點(diǎn)處于同一數(shù)據(jù)片的至少一個(gè)數(shù)據(jù)片。
[0055]映射單元303,用于將預(yù)處理所得至少一個(gè)數(shù)據(jù)片映射至從節(jié)點(diǎn)。
[0056]算法執(zhí)行單元304,用于采用迭代算法對(duì)映射至從節(jié)點(diǎn)的數(shù)據(jù)片進(jìn)行計(jì)算。
[0057]用戶定制算法以繼承頂點(diǎn)基類并重寫計(jì)算方法來(lái)實(shí)現(xiàn)。具體地,算法支持以頂點(diǎn)為中心的計(jì)算,即計(jì)算算法均從頂點(diǎn)出發(fā),涉及到對(duì)頂點(diǎn)、邊的修改更新、增加與刪除。該計(jì)算算法應(yīng)包含完整的迭代操作,即包括計(jì)算步與通信步。用戶需從頂點(diǎn)計(jì)算的思想出發(fā)設(shè)計(jì)算法,頂點(diǎn)設(shè)定有運(yùn)算狀態(tài)與終止?fàn)顟B(tài),當(dāng)不再有計(jì)算狀態(tài)的頂點(diǎn)存在,也不再有新的通信產(chǎn)生時(shí),系統(tǒng)終止算法運(yùn)行?;蛴脩糇远x終止的條件,并在計(jì)算算法函數(shù)中實(shí)現(xiàn)。用戶亦可以自定義樁(主)函數(shù),此時(shí)需用戶指定具體的讀寫操作方法。算法執(zhí)行單元304負(fù)責(zé)按照預(yù)定順序調(diào)用用戶自定義的算法,以默認(rèn)樁函數(shù)的形式初始化系統(tǒng),并開始迭代,檢測(cè)到運(yùn)行結(jié)束后,負(fù)責(zé)將計(jì)算結(jié)果寫回持久存儲(chǔ)介質(zhì)。
[0058]需要說明的是,以上附圖3示例的大規(guī)模圖結(jié)構(gòu)數(shù)據(jù)處理裝置的實(shí)施方式中,各功能單元的劃分僅是舉例說明,實(shí)際應(yīng)用中可以根據(jù)需要,例如相應(yīng)硬件的配置要求或者軟件的實(shí)現(xiàn)的便利考慮,而將上述功能分配由不同的功能單元完成,即將所述大規(guī)模圖結(jié)構(gòu)數(shù)據(jù)處理裝置的內(nèi)部結(jié)構(gòu)劃分成不同的功能模塊,以完成以上描述的全部或者部分功能。而且,實(shí)際應(yīng)用中,本實(shí)施例中的相應(yīng)的功能模塊可以是由相應(yīng)的硬件實(shí)現(xiàn),也可以由相應(yīng)的硬件執(zhí)行相應(yīng)的軟件完成,例如,前述的數(shù)據(jù)預(yù)處理單元,可以是具有執(zhí)行前述對(duì)內(nèi)存中的圖結(jié)構(gòu)數(shù)據(jù)進(jìn)行預(yù)處理,得到所述圖結(jié)構(gòu)數(shù)據(jù)中相鄰頂點(diǎn)處于同一數(shù)據(jù)片的至少一個(gè)數(shù)據(jù)片的硬件,例如數(shù)據(jù)預(yù)處理器,也可以是能夠執(zhí)行相應(yīng)計(jì)算機(jī)程序從而完成前述功能的一般處理器或者其他硬件設(shè)備;再如前述的映射單元,可以是具有執(zhí)行前述將所述預(yù)處理所得至少一個(gè)數(shù)據(jù)片映射至從節(jié)點(diǎn)功能的硬件,例如映射器,也可以是能夠執(zhí)行相應(yīng)計(jì)算機(jī)程序從而完成前述功能的一般處理器或者其他硬件設(shè)備(本說明書提供的各個(gè)實(shí)施例都可應(yīng)用上述描述原則)。
[0059]附圖3示例的數(shù)據(jù)預(yù)處理單元302可以包括相鄰頂點(diǎn)確定單元401和分割單元402,如附圖4所示本發(fā)明另一實(shí)施例提供的大規(guī)模圖結(jié)構(gòu)數(shù)據(jù)處理裝置,其中:
[0060]相鄰頂點(diǎn)確定單元401,用于根據(jù)圖結(jié)構(gòu)數(shù)據(jù)的結(jié)構(gòu)確定相鄰頂點(diǎn);
[0061]分割單元402,用于以圖結(jié)構(gòu)數(shù)據(jù)中任意一個(gè)頂點(diǎn)為初始頂點(diǎn),采用廣度優(yōu)先遍歷,盡其所能地將所述圖結(jié)構(gòu)數(shù)據(jù)中相鄰頂點(diǎn)分割至同一數(shù)據(jù)片,所述分割至同一數(shù)據(jù)片中的頂點(diǎn)數(shù)量以預(yù)設(shè)值為上限。以附圖2示例的圖結(jié)構(gòu)數(shù)據(jù)為例,分割單元402具體執(zhí)行:在圖中隨機(jī)選擇一個(gè)頂點(diǎn)作為廣度優(yōu)先遍歷的初始頂點(diǎn),如附圖2中的黑色頂點(diǎn)作為遍歷的初始頂點(diǎn);從該初始頂點(diǎn)開始進(jìn)行廣度優(yōu)先遍歷,直到所遍歷到的頂點(diǎn)數(shù)量達(dá)到一個(gè)預(yù)設(shè)值(該預(yù)設(shè)值可采用默認(rèn)值,也可由用戶設(shè)定)為止;以頂點(diǎn)數(shù)量達(dá)到所述預(yù)設(shè)值時(shí)所遍歷的一個(gè)頂點(diǎn)以及之前遍歷的頂點(diǎn)(包括初始頂點(diǎn))作為一個(gè)數(shù)據(jù)片,從原圖結(jié)構(gòu)數(shù)據(jù)分割開來(lái),分割該數(shù)據(jù)片的分割曲線如附圖2中的曲線所示;任取分割曲線另一側(cè)的一個(gè)頂點(diǎn)作為下次迭代的起點(diǎn),重復(fù)以上分割方法,直至所有頂點(diǎn)均已分割到某一個(gè)數(shù)據(jù)片中為止。
[0062]附圖3示例的映射單元303具體用于將預(yù)處理所得至少一個(gè)數(shù)據(jù)片中同一數(shù)據(jù)片映射至由同一主節(jié)點(diǎn)管控的控制域內(nèi)至少兩個(gè)從節(jié)點(diǎn),算法執(zhí)行單元304位于至少兩個(gè)從節(jié)點(diǎn)中任意一個(gè)從節(jié)點(diǎn),具體用于采用迭代算法對(duì)映射至從節(jié)點(diǎn)的數(shù)據(jù)片進(jìn)行計(jì)算。
[0063]附圖3或附圖4示例的大規(guī)模圖結(jié)構(gòu)數(shù)據(jù)處理裝置還可以包括通信控制單元501,如附圖5-a或附圖5-b所示本發(fā)明另一實(shí)施例提供的大規(guī)模圖結(jié)構(gòu)數(shù)據(jù)處理裝置。通信控制單元501用于協(xié)調(diào)數(shù)據(jù)讀取單元301執(zhí)行圖結(jié)構(gòu)數(shù)據(jù)讀取、數(shù)據(jù)預(yù)處理單元302執(zhí)行預(yù)處理、映射單元303執(zhí)行映射和算法執(zhí)行單元304執(zhí)行數(shù)據(jù)片計(jì)算過程中主節(jié)點(diǎn)與主節(jié)點(diǎn)之間以及主節(jié)點(diǎn)與從節(jié)點(diǎn)之間的消息傳遞。具體地,通信控制單元501協(xié)調(diào)分布式集群系統(tǒng)中節(jié)點(diǎn)(包括主節(jié)點(diǎn)和從節(jié)點(diǎn))之間的消息傳遞,分為MasterSwitch與SlaveSwitch兩個(gè)部分,對(duì)應(yīng)于兩級(jí)通信機(jī)制即主節(jié)點(diǎn)-主節(jié)點(diǎn),從節(jié)點(diǎn)-從節(jié)點(diǎn),其中,MasterSwitch運(yùn)行在主節(jié)點(diǎn)上,SlaveSwitch運(yùn)行在從節(jié)點(diǎn)上,每個(gè)節(jié)點(diǎn)僅運(yùn)行一個(gè)Switch實(shí)例。主節(jié)點(diǎn)之間是可見的,每個(gè)主節(jié)點(diǎn)管理一個(gè)由從節(jié)點(diǎn)構(gòu)成的域,該域內(nèi)可存在若干個(gè)從節(jié)點(diǎn)。從節(jié)點(diǎn)之間不直接可見,須由主節(jié)點(diǎn)作為橋梁轉(zhuǎn)發(fā)或傳輸消息。MasterSwitch部分處理主節(jié)點(diǎn)-主節(jié)點(diǎn)以及主節(jié)點(diǎn)-從節(jié)點(diǎn)之間的通信傳輸與同步,由于主節(jié)點(diǎn)控制著整個(gè)系統(tǒng)的運(yùn)行進(jìn)度,掌握運(yùn)行狀態(tài)。主節(jié)點(diǎn)管理數(shù)據(jù)片在從節(jié)點(diǎn)上的分布信息、從節(jié)點(diǎn)的計(jì)算狀態(tài)及數(shù)據(jù)片內(nèi)迭代算法的運(yùn)行進(jìn)度等。SlaveSwitch部分處理主節(jié)點(diǎn)-從節(jié)點(diǎn)之間的通信傳輸與同步。從節(jié)點(diǎn)內(nèi)部運(yùn)算產(chǎn)生消息通信需求,根據(jù)消息的接收方地址來(lái)確定是否將該消息發(fā)送給從節(jié)點(diǎn)所屬的域。
[0064]附圖3或附圖4示例的大規(guī)模圖結(jié)構(gòu)數(shù)據(jù)處理裝置還可以包括容錯(cuò)恢復(fù)單元601,如附圖6-a或附圖6-b所示本發(fā)明另一實(shí)施例提供的大規(guī)模圖結(jié)構(gòu)數(shù)據(jù)處理裝置。容錯(cuò)恢復(fù)單元601用于將對(duì)映射至從節(jié)點(diǎn)的數(shù)據(jù)片進(jìn)行計(jì)算時(shí)所得中間結(jié)果存儲(chǔ)至從節(jié)點(diǎn)中的持久存儲(chǔ)介質(zhì),在執(zhí)行計(jì)算的從節(jié)點(diǎn)出現(xiàn)異?;蝈e(cuò)誤時(shí),將所述中間結(jié)果重新映射至由同一主節(jié)點(diǎn)管控的控制域內(nèi)另一從節(jié)點(diǎn),由所述另一從節(jié)點(diǎn)根據(jù)所述中間結(jié)果繼續(xù)計(jì)算過程。
[0065]請(qǐng)參閱附圖7,是本發(fā)明實(shí)施例提供的一種大規(guī)模圖結(jié)構(gòu)數(shù)據(jù)處理系統(tǒng)結(jié)構(gòu)示意圖,其可以是分布式集群系統(tǒng)。為了便于說明,僅僅示出了與本發(fā)明實(shí)施例相關(guān)的部分。與現(xiàn)有技術(shù)提供的大規(guī)模圖結(jié)構(gòu)數(shù)據(jù)處理系統(tǒng)(例如,Giraph系統(tǒng))不同的是,附圖7示例的大規(guī)模圖結(jié)構(gòu)數(shù)據(jù)處理系統(tǒng)包括至少兩個(gè)從節(jié)點(diǎn)(即Slave計(jì)算節(jié)點(diǎn))和至少兩個(gè)主節(jié)點(diǎn)(即Master計(jì)算節(jié)點(diǎn)),至少兩個(gè)主節(jié)點(diǎn)管控各自控制域內(nèi)的至少兩個(gè)從節(jié)點(diǎn),其中,主節(jié)點(diǎn),主節(jié)點(diǎn)管理其定義的域,域內(nèi)還有至少兩個(gè)從節(jié)點(diǎn),一個(gè)從節(jié)點(diǎn)僅與管理其所屬域的主節(jié)點(diǎn)通信,具體地,主節(jié)點(diǎn)負(fù)責(zé)整個(gè)系統(tǒng)的運(yùn)行狀態(tài)控制以及負(fù)責(zé)通信管理、計(jì)算迭代控制、異常錯(cuò)誤恢復(fù)等,,從節(jié)點(diǎn)負(fù)責(zé)具體執(zhí)行數(shù)據(jù)存儲(chǔ)與定制算法計(jì)算,并且,為保證數(shù)據(jù)存儲(chǔ)的可靠性,經(jīng)預(yù)處理后得到的數(shù)據(jù)片存儲(chǔ)2份以上,且每份均在同一個(gè)域內(nèi)的不同從節(jié)點(diǎn)上,如此,當(dāng)一個(gè)從節(jié)點(diǎn)損壞時(shí),該域內(nèi)另一個(gè)從節(jié)點(diǎn)仍可以繼續(xù)執(zhí)行該算法的迭代運(yùn)算。每次算法迭代產(chǎn)生的通信、頂點(diǎn)的當(dāng)前狀態(tài)值等中間結(jié)果周期性地存儲(chǔ)到持久介質(zhì)。當(dāng)運(yùn)算至某一狀態(tài)某個(gè)從節(jié)點(diǎn)出錯(cuò)時(shí),則可從上一次保存的數(shù)據(jù)開始繼續(xù)運(yùn)行而不需重啟計(jì)算程序。
[0066]附圖7示例的大規(guī)模圖結(jié)構(gòu)數(shù)據(jù)處理系統(tǒng)為用戶迭代算法提供統(tǒng)一的同步方式(類似于BSP模型),每一次迭代稱為一個(gè)超級(jí)步,包括計(jì)算步和通信步。首先由主節(jié)點(diǎn)(即Master計(jì)算節(jié)點(diǎn))啟動(dòng)迭代算法,然后從(Slave)機(jī)器完成一個(gè)計(jì)算任務(wù)中的計(jì)算步,由計(jì)算步產(chǎn)生的數(shù)據(jù)交換需求轉(zhuǎn)交通信步,以完成通信同步,通信步根據(jù)計(jì)算步定義的接收方、消息內(nèi)容等,封裝消息并發(fā)送給通信控制單元,由通信控制單元完成消息的傳遞。一個(gè)超級(jí)步執(zhí)行數(shù)據(jù)中所有可計(jì)算頂點(diǎn)的計(jì)算,多個(gè)進(jìn)程同時(shí)執(zhí)行,除第一個(gè)超級(jí)步外其余超級(jí)步,均在完成接收上一個(gè)超級(jí)步發(fā)送來(lái)的消息之后,才執(zhí)行本次計(jì)算步操作。由于通信僅在兩個(gè)相鄰的超級(jí)步之間發(fā)生,且計(jì)算步只在通信步完成后執(zhí)行,因此不需要加鎖控制同步,可以有效地避免傳統(tǒng)分布式處理中遇到的死鎖和數(shù)據(jù)競(jìng)爭(zhēng)問題,為調(diào)試、優(yōu)化帶來(lái)極大便利。當(dāng)數(shù)據(jù)中無(wú)可計(jì)算頂點(diǎn)也無(wú)消息傳遞且無(wú)計(jì)算狀態(tài)頂點(diǎn)時(shí),或達(dá)到用戶自定義的迭代終止條件(例如次數(shù)上界等),則迭代算法終止。
[0067]附圖7示例的大規(guī)模圖結(jié)構(gòu)數(shù)據(jù)處理系統(tǒng)中,至少兩個(gè)從節(jié)點(diǎn)中的任意一個(gè)從節(jié)點(diǎn)用于將圖結(jié)構(gòu)數(shù)據(jù)讀取至內(nèi)存,對(duì)內(nèi)存中的圖結(jié)構(gòu)數(shù)據(jù)進(jìn)行預(yù)處理,得到圖結(jié)構(gòu)數(shù)據(jù)中相鄰頂點(diǎn)處于同一數(shù)據(jù)片的至少一個(gè)數(shù)據(jù)片,至少兩個(gè)主節(jié)點(diǎn)中的任意一個(gè)主節(jié)點(diǎn)用于將預(yù)處理所得至少一個(gè)數(shù)據(jù)片映射至從節(jié)點(diǎn),至少兩個(gè)從節(jié)點(diǎn)中的任意一個(gè)從節(jié)點(diǎn)用于采用迭代算法對(duì)映射至從節(jié)點(diǎn)的數(shù)據(jù)片進(jìn)行計(jì)算。這種處理方式的優(yōu)點(diǎn)在于:若該從節(jié)點(diǎn)在執(zhí)行計(jì)算過程中出現(xiàn)異常或錯(cuò)誤,則可以選擇另一從節(jié)點(diǎn)繼續(xù)執(zhí)行計(jì)算,如此,保證了系統(tǒng)運(yùn)行的穩(wěn)定。
[0068]在附圖7示例的大規(guī)模圖結(jié)構(gòu)數(shù)據(jù)處理系統(tǒng)中,至少兩個(gè)從節(jié)點(diǎn)中的任意一個(gè)從節(jié)點(diǎn)用于根據(jù)圖結(jié)構(gòu)數(shù)據(jù)的結(jié)構(gòu)確定相鄰頂點(diǎn),以圖結(jié)構(gòu)數(shù)據(jù)中任意一個(gè)頂點(diǎn)為初始頂點(diǎn),采用廣度優(yōu)先遍歷,盡其所能地將所述圖結(jié)構(gòu)數(shù)據(jù)中相鄰頂點(diǎn)分割至同一數(shù)據(jù)片,其中,分割至同一數(shù)據(jù)片中的頂點(diǎn)數(shù)量以預(yù)設(shè)值為上限。以附圖2示例的圖結(jié)構(gòu)數(shù)據(jù)為例,至少兩個(gè)從節(jié)點(diǎn)中的任意一個(gè)從節(jié)點(diǎn)在對(duì)圖結(jié)構(gòu)數(shù)據(jù)進(jìn)行分割,得到數(shù)據(jù)片時(shí)具體執(zhí)行:在圖中隨機(jī)選擇一個(gè)頂點(diǎn)作為廣度優(yōu)先遍歷的初始頂點(diǎn),如附圖2中的黑色頂點(diǎn)作為遍歷的初始頂點(diǎn);從該初始頂點(diǎn)開始進(jìn)行廣度優(yōu)先遍歷,直到所遍歷到的頂點(diǎn)數(shù)量達(dá)到一個(gè)預(yù)設(shè)值(該預(yù)設(shè)值可采用默認(rèn)值,也可由用戶設(shè)定)為止;以頂點(diǎn)數(shù)量達(dá)到所述預(yù)設(shè)值時(shí)所遍歷的一個(gè)頂點(diǎn)以及之前遍歷的頂點(diǎn)(包括初始頂點(diǎn))作為一個(gè)數(shù)據(jù)片,從原圖結(jié)構(gòu)數(shù)據(jù)分割開來(lái),分割該數(shù)據(jù)片的分割曲線如附圖2中的曲線所示;任取分割曲線另一側(cè)的一個(gè)頂點(diǎn)作為下次迭代的起點(diǎn),重復(fù)以上分割方法,直至所有頂點(diǎn)均已分割到某一個(gè)數(shù)據(jù)片中為止。在本實(shí)施例中,對(duì)圖結(jié)構(gòu)數(shù)據(jù)所做的預(yù)處理,即,將圖結(jié)構(gòu)數(shù)據(jù)分割成內(nèi)部關(guān)聯(lián)較密切的數(shù)據(jù)片為處理單位,使從節(jié)點(diǎn)執(zhí)行的計(jì)算算法保持了良好的局部性特點(diǎn),可顯著減少數(shù)據(jù)讀取延遲,減少通信量,降低對(duì)集群內(nèi)帶寬資源的需求。
[0069]附圖7示例的大規(guī)模圖結(jié)構(gòu)數(shù)據(jù)處理系統(tǒng)中,至少兩個(gè)主節(jié)點(diǎn)中的任意一個(gè)主節(jié)點(diǎn)還用于協(xié)調(diào)圖結(jié)構(gòu)數(shù)據(jù)讀取、預(yù)處理、映射和數(shù)據(jù)片計(jì)算過程中主節(jié)點(diǎn)與主節(jié)點(diǎn)之間以及主節(jié)點(diǎn)與從節(jié)點(diǎn)之間的消息傳遞。實(shí)際上,這種協(xié)調(diào)分為MasterSwitch與SlaveSwitch兩個(gè)部分執(zhí)行,對(duì)應(yīng)于兩級(jí)通信機(jī)制即主節(jié)點(diǎn)_主節(jié)點(diǎn),從節(jié)點(diǎn)_從節(jié)點(diǎn),其中,MasterSwitch運(yùn)行在主節(jié)點(diǎn)上,SlaveSwitch運(yùn)行在從節(jié)點(diǎn)上,每個(gè)節(jié)點(diǎn)僅運(yùn)行一個(gè)Switch實(shí)例。主節(jié)點(diǎn)之間是可見的,每個(gè)主節(jié)點(diǎn)管理一個(gè)由從節(jié)點(diǎn)構(gòu)成的域,該域內(nèi)可存在若干個(gè)從節(jié)點(diǎn)。從節(jié)點(diǎn)之間不直接可見,須由主節(jié)點(diǎn)作為橋梁轉(zhuǎn)發(fā)或傳輸消息。MasterSwitch部分處理主節(jié)點(diǎn)-主節(jié)點(diǎn)以及主節(jié)點(diǎn)_從節(jié)點(diǎn)之間的通信傳輸與同步,由于主節(jié)點(diǎn)控制著整個(gè)系統(tǒng)的運(yùn)行進(jìn)度,掌握運(yùn)行狀態(tài)。主節(jié)點(diǎn)管理數(shù)據(jù)片在從節(jié)點(diǎn)上的分布信息、從節(jié)點(diǎn)的計(jì)算狀態(tài)及數(shù)據(jù)片內(nèi)迭代算法的運(yùn)行進(jìn)度等。SlaveSwitch部分處理主節(jié)點(diǎn)-從節(jié)點(diǎn)之間的通信傳輸與同步。從節(jié)點(diǎn)內(nèi)部運(yùn)算產(chǎn)生消息通信需求,根據(jù)消息的接收方地址來(lái)確定是否將該消息發(fā)送給從節(jié)點(diǎn)所屬的域。上述兩級(jí)通信機(jī)制的優(yōu)點(diǎn)在于減少節(jié)點(diǎn)之間的通信量,降低延遲,可通過多個(gè)主節(jié)點(diǎn)并行運(yùn)行,從而保證系統(tǒng)運(yùn)行的可靠性與容錯(cuò)恢復(fù)能力。
[0070]附圖7示例的大規(guī)模圖結(jié)構(gòu)數(shù)據(jù)處理系統(tǒng)中,至少兩個(gè)從節(jié)點(diǎn)中任意一個(gè)從節(jié)點(diǎn)還用于將對(duì)映射至所述從節(jié)點(diǎn)的數(shù)據(jù)片進(jìn)行計(jì)算時(shí)所得中間結(jié)果存儲(chǔ)至從節(jié)點(diǎn)中的持久存儲(chǔ)介質(zhì),至少兩個(gè)主節(jié)點(diǎn)中的任意一個(gè)主節(jié)點(diǎn)還用于在執(zhí)行計(jì)算的從節(jié)點(diǎn)出現(xiàn)異?;蝈e(cuò)誤時(shí),將所述中間結(jié)果重新映射至由同一主節(jié)點(diǎn)管控的控制域內(nèi)另一從節(jié)點(diǎn),由所述另一從節(jié)點(diǎn)根據(jù)所述中間結(jié)果繼續(xù)所述計(jì)算過程。
[0071]需要說明的是,上述裝置各模塊/單元之間的信息交互、執(zhí)行過程等內(nèi)容,由于與本發(fā)明方法實(shí)施例基于同一構(gòu)思,其帶來(lái)的技術(shù)效果與本發(fā)明方法實(shí)施例相同,具體內(nèi)容可參見本發(fā)明方法實(shí)施例中的敘述,此處不再贅述。
[0072]本領(lǐng)域普通技術(shù)人員可以理解上述實(shí)施例的各種方法中的全部或部分步驟是可以通過程序來(lái)指令相關(guān)的硬件來(lái)完成,該程序可以存儲(chǔ)于一計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)中,存儲(chǔ)介質(zhì)可以包括:只讀存儲(chǔ)器(ROM,Read Only Memory)、隨機(jī)存取存儲(chǔ)器(RAM,RandomAccess Memory)、磁盤或光盤等。
[0073]以上對(duì)本發(fā)明實(shí)施例所提供的一種大規(guī)模圖結(jié)構(gòu)數(shù)據(jù)處理方法、裝置和系統(tǒng)進(jìn)行了詳細(xì)介紹,本文中應(yīng)用了具體個(gè)例對(duì)本發(fā)明的原理及實(shí)施方式進(jìn)行了闡述,以上實(shí)施例的說明只是用于幫助理解本發(fā)明的方法及其核心思想;同時(shí),對(duì)于本領(lǐng)域的一般技術(shù)人員,依據(jù)本發(fā)明的思想,在【具體實(shí)施方式】及應(yīng)用范圍上均會(huì)有改變之處,綜上所述,本說明書內(nèi)容不應(yīng)理解為對(duì)本發(fā)明的限制。
【權(quán)利要求】
1.一種大規(guī)模圖結(jié)構(gòu)數(shù)據(jù)處理方法,其特征在于,所述方法包括: 從節(jié)點(diǎn)將圖結(jié)構(gòu)數(shù)據(jù)讀取至內(nèi)存; 對(duì)所述內(nèi)存中的圖結(jié)構(gòu)數(shù)據(jù)進(jìn)行預(yù)處理,得到所述圖結(jié)構(gòu)數(shù)據(jù)中相鄰頂點(diǎn)處于同一數(shù)據(jù)片的至少一個(gè)數(shù)據(jù)片; 將所述預(yù)處理所得至少一個(gè)數(shù)據(jù)片映射至從節(jié)點(diǎn); 所述從節(jié)點(diǎn)采用迭代算法對(duì)所述映射至所述從節(jié)點(diǎn)的數(shù)據(jù)片進(jìn)行計(jì)算。
2.根據(jù)權(quán)利要求1所述的方法,其特征在于,所述對(duì)所述內(nèi)存中的圖結(jié)構(gòu)數(shù)據(jù)進(jìn)行預(yù)處理,得到所述圖結(jié)構(gòu)數(shù)據(jù)中相鄰頂點(diǎn)處于同一數(shù)據(jù)片的至少一個(gè)數(shù)據(jù)片,包括: 根據(jù)所述圖結(jié)構(gòu)數(shù)據(jù)的結(jié)構(gòu)確定所述相鄰頂點(diǎn); 以所述圖結(jié)構(gòu)數(shù)據(jù)中任意一個(gè)頂點(diǎn)為初始頂點(diǎn),采用廣度優(yōu)先遍歷,盡其所能地將所述圖結(jié)構(gòu)數(shù)據(jù)中相鄰頂點(diǎn)分割至同一數(shù)據(jù)片,所述分割至同一數(shù)據(jù)片中的頂點(diǎn)數(shù)量以預(yù)設(shè)值為上限。
3.根據(jù)權(quán)利要求1所述的方法,其特征在于,所述將所述預(yù)處理所得至少一個(gè)數(shù)據(jù)片映射至從節(jié)點(diǎn)包括:將所述預(yù)處理所得至少一個(gè)數(shù)據(jù)片中同一數(shù)據(jù)片映射至由同一主節(jié)點(diǎn)管控的控制域內(nèi)至少兩個(gè)從節(jié)點(diǎn); 所述所述從節(jié)點(diǎn)采用迭代算法對(duì)所述映射至所述從節(jié)點(diǎn)的數(shù)據(jù)片進(jìn)行計(jì)算包括:所述至少兩個(gè)從節(jié)點(diǎn)中任意一個(gè)從節(jié)點(diǎn)采用迭代算法對(duì)所述映射至從節(jié)點(diǎn)的數(shù)據(jù)片進(jìn)行計(jì)算。
4.根據(jù)權(quán)利要求1至3任意一項(xiàng)所述的方法,其特征在于,所述方法還包括: 協(xié)調(diào)所述圖結(jié)構(gòu)數(shù)據(jù)讀取、預(yù)處理、映射和數(shù)據(jù)片計(jì)算過程中主節(jié)點(diǎn)與主節(jié)點(diǎn)之間以及主節(jié)點(diǎn)與從節(jié)點(diǎn)之間的消息傳遞。
5.根據(jù)權(quán)利要求1至3任意一項(xiàng)所述的方法,其特征在于,所述方法還包括: 將對(duì)所述映射至所述從節(jié)點(diǎn)的數(shù)據(jù)片進(jìn)行計(jì)算時(shí)所得中間結(jié)果存儲(chǔ)至所述從節(jié)點(diǎn)中的持久存儲(chǔ)介質(zhì); 在執(zhí)行計(jì)算的從節(jié)點(diǎn)出現(xiàn)異?;蝈e(cuò)誤時(shí),將所述中間結(jié)果重新映射至由同一主節(jié)點(diǎn)管控的控制域內(nèi)另一從節(jié)點(diǎn),由所述另一從節(jié)點(diǎn)根據(jù)所述中間結(jié)果繼續(xù)所述計(jì)算過程。
6.一種大規(guī)模圖結(jié)構(gòu)數(shù)據(jù)處理裝置,其特征在于,所述裝置包括: 數(shù)據(jù)讀取單元,用于將圖結(jié)構(gòu)數(shù)據(jù)讀取至內(nèi)存; 數(shù)據(jù)預(yù)處理單元,用于對(duì)所述內(nèi)存中的圖結(jié)構(gòu)數(shù)據(jù)進(jìn)行預(yù)處理,得到所述圖結(jié)構(gòu)數(shù)據(jù)中相鄰頂點(diǎn)處于同一數(shù)據(jù)片的至少一個(gè)數(shù)據(jù)片; 映射單元,用于將所述預(yù)處理所得至少一個(gè)數(shù)據(jù)片映射至從節(jié)點(diǎn); 算法執(zhí)行單元,用于采用迭代算法對(duì)所述映射至所述從節(jié)點(diǎn)的數(shù)據(jù)片進(jìn)行計(jì)算。
7.根據(jù)權(quán)利要求6所述的裝置,其特征在于,所述數(shù)據(jù)預(yù)處理單元包括: 相鄰頂點(diǎn)確定單元,用于根據(jù)所述圖結(jié)構(gòu)數(shù)據(jù)的結(jié)構(gòu)確定所述相鄰頂點(diǎn); 分割單元,用于以所述圖結(jié)構(gòu)數(shù)據(jù)中任意一個(gè)頂點(diǎn)為初始頂點(diǎn),采用廣度優(yōu)先遍歷,盡其所能地將所述圖結(jié)構(gòu)數(shù)據(jù)中相鄰頂點(diǎn)分割至同一數(shù)據(jù)片,所述分割至同一數(shù)據(jù)片中的頂點(diǎn)數(shù)量以預(yù)設(shè)值為上限。
8.根據(jù)權(quán)利要求6所述的裝置,其特征在于,所述映射單元具體用于將所述預(yù)處理所得至少一個(gè)數(shù)據(jù)片中同一數(shù)據(jù)片映射至由同一主節(jié)點(diǎn)管控的控制域內(nèi)至少兩個(gè)從節(jié)點(diǎn); 所述算法執(zhí)行單元位于所述至少兩個(gè)從節(jié)點(diǎn)中任意一個(gè)從節(jié)點(diǎn),所述算法執(zhí)行單元具體用于采用迭代算法對(duì)所述映射至從節(jié)點(diǎn)的數(shù)據(jù)片進(jìn)行計(jì)算。
9.根據(jù)權(quán)利要求6至8任意一項(xiàng)所述的裝置,其特征在于,所述裝置還包括: 通信控制單元,用于協(xié)調(diào)所述圖結(jié)構(gòu)數(shù)據(jù)讀取、預(yù)處理、映射和數(shù)據(jù)片計(jì)算過程中主節(jié)點(diǎn)與主節(jié)點(diǎn)之間以及主節(jié)點(diǎn)與從節(jié)點(diǎn)之間的消息傳遞。
10.根據(jù)權(quán)利要求6至8任意一項(xiàng)所述的裝置,其特征在于,所述裝置還包括: 容錯(cuò)恢復(fù)單元,用于將對(duì)所述映射至所述從節(jié)點(diǎn)的數(shù)據(jù)片進(jìn)行計(jì)算時(shí)所得中間結(jié)果存儲(chǔ)至所述從節(jié)點(diǎn)中的持久存儲(chǔ)介質(zhì),在執(zhí)行計(jì)算的從節(jié)點(diǎn)出現(xiàn)異常或錯(cuò)誤時(shí),將所述中間結(jié)果重新映射至由同一主節(jié)點(diǎn)管控的控制域內(nèi)另一從節(jié)點(diǎn),由所述另一從節(jié)點(diǎn)根據(jù)所述中間結(jié)果繼續(xù)所述計(jì)算過程。
11.一種大規(guī)模圖結(jié)構(gòu)數(shù)據(jù)處理系統(tǒng),其特征在于,所述系統(tǒng)包括至少兩個(gè)從節(jié)點(diǎn)和至少兩個(gè)主節(jié)點(diǎn),所述至少兩個(gè)主節(jié)點(diǎn)管控各自控制域內(nèi)的至少兩個(gè)從節(jié)點(diǎn); 所述至少兩個(gè)從節(jié)點(diǎn)中的任意一個(gè)從節(jié)點(diǎn)用于將圖結(jié)構(gòu)數(shù)據(jù)讀取至內(nèi)存,對(duì)所述內(nèi)存中的圖結(jié)構(gòu)數(shù)據(jù)進(jìn)行預(yù)處理,得到所述圖結(jié)構(gòu)數(shù)據(jù)中相鄰頂點(diǎn)處于同一數(shù)據(jù)片的至少一個(gè)數(shù)據(jù)片; 所述至少兩個(gè)主節(jié)點(diǎn)中的任意一個(gè)主節(jié)點(diǎn)用于將所述預(yù)處理所得至少一個(gè)數(shù)據(jù)片映射至從節(jié)點(diǎn); 所述至少兩個(gè)從節(jié)點(diǎn)中的任意一個(gè)從節(jié)點(diǎn)用于采用迭代算法對(duì)所述映射至所述從節(jié)點(diǎn)的數(shù)據(jù)片進(jìn)行計(jì)算。
12.根據(jù)權(quán)利要求11所述的系統(tǒng),其特征在于,所述至少兩個(gè)從節(jié)點(diǎn)中的任意一個(gè)從節(jié)點(diǎn)用于根據(jù)所述圖結(jié)構(gòu)數(shù)據(jù)的結(jié)構(gòu)確定所述相鄰頂點(diǎn),以所述圖結(jié)構(gòu)數(shù)據(jù)中任意一個(gè)頂點(diǎn)為初始頂點(diǎn),采用廣度優(yōu)先遍歷,盡其所能地將所述圖結(jié)構(gòu)數(shù)據(jù)中相鄰頂點(diǎn)分割至同一數(shù)據(jù)片,所述分割至同一數(shù)據(jù)片中的頂點(diǎn)數(shù)量以預(yù)設(shè)值為上限。
13.根據(jù)權(quán)利要求11所述的系統(tǒng),其特征在于,所述至少兩個(gè)主節(jié)點(diǎn)中的任意一個(gè)主節(jié)點(diǎn)用于將所述預(yù)處理所得至少一個(gè)數(shù)據(jù)片中同一數(shù)據(jù)片映射至由同一主節(jié)點(diǎn)管控的控制域內(nèi)至少兩個(gè)從節(jié)點(diǎn),所述至少兩個(gè)從節(jié)點(diǎn)中任意一個(gè)從節(jié)點(diǎn)采用迭代算法對(duì)所述映射至從節(jié)點(diǎn)的數(shù)據(jù)片進(jìn)行計(jì)算。
14.根據(jù)權(quán)利要求11至13任意一項(xiàng)所述的系統(tǒng),其特征在于,所述至少兩個(gè)主節(jié)點(diǎn)中的任意一個(gè)主節(jié)點(diǎn)還用于協(xié)調(diào)所述圖結(jié)構(gòu)數(shù)據(jù)讀取、預(yù)處理、映射和數(shù)據(jù)片計(jì)算過程中主節(jié)點(diǎn)與主節(jié)點(diǎn)之間以及主節(jié)點(diǎn)與從節(jié)點(diǎn)之間的消息傳遞。
15.根據(jù)權(quán)利要求11至13任意一項(xiàng)所述的系統(tǒng),其特征在于,所述至少兩個(gè)從節(jié)點(diǎn)中任意一個(gè)從節(jié)點(diǎn)還用于將對(duì)所述映射至所述從節(jié)點(diǎn)的數(shù)據(jù)片進(jìn)行計(jì)算時(shí)所得中間結(jié)果存儲(chǔ)至所述從節(jié)點(diǎn)中的持久存儲(chǔ)介質(zhì),所述至少兩個(gè)主節(jié)點(diǎn)中的任意一個(gè)主節(jié)點(diǎn)還用于在執(zhí)行計(jì)算的從節(jié)點(diǎn)出現(xiàn)異?;蝈e(cuò)誤時(shí),將所述中間結(jié)果重新映射至由同一主節(jié)點(diǎn)管控的控制域內(nèi)另一從節(jié)點(diǎn),由所述另一從節(jié)點(diǎn)根據(jù)所述中間結(jié)果繼續(xù)所述計(jì)算過程。
【文檔編號(hào)】G06F12/02GK103631878SQ201310557066
【公開日】2014年3月12日 申請(qǐng)日期:2013年11月8日 優(yōu)先權(quán)日:2013年11月8日
【發(fā)明者】劉明君, 趙中英, 馮錚, 何一峰, 馮圣中 申請(qǐng)人:中國(guó)科學(xué)院深圳先進(jìn)技術(shù)研究院