超大規(guī)模rdf圖數(shù)據(jù)的劃分與并行分布處理方法
【技術(shù)領(lǐng)域】
[0001] 本發(fā)明屬于大數(shù)據(jù)處理領(lǐng)域,更具體地,涉及一種超大規(guī)模RDF圖數(shù)據(jù)的劃分與 并行分布處理方法。
【背景技術(shù)】
[0002] 資源描述框架(Resource Description Framework,簡稱RDF)是整個語義網(wǎng)系統(tǒng) 結(jié)構(gòu)中的核心,它被廣泛用來描述互聯(lián)網(wǎng)上存在的各種信息資源。隨著RDF數(shù)據(jù)的不斷增 長,在單機上處理已經(jīng)顯得力不從心了,所以必須將RDF數(shù)據(jù)劃分到多機上進行處理。
[0003] 對超大規(guī)模RDF圖數(shù)據(jù)的劃分,常用的方法有啟發(fā)式劃分和并行層次劃分。對 于啟發(fā)式方法,一般是提供一個目標函數(shù),然后劃分圍繞著這個函數(shù)的最優(yōu)化方向展開, 但是目標函數(shù)的選取比較困難。對于并行層次劃分,則包含三個劃分階段:粗化階段 (Coarsen)、初始化階段(Initial)和細化提純階段(Uncoarsen refinement),粗化階段則 把大圖收縮為小圖,初始化階段則對小圖進行劃分,細化提純階段則將小圖還原回大圖,最 終完成劃分。這兩種方法普遍存在劃分時間過長、劃分質(zhì)量不高和任務(wù)負載不均衡的問題, 最終導(dǎo)致數(shù)據(jù)的查詢處理性能低效。另外,還有采用Metis劃分工具將RDF數(shù)據(jù)的頂點劃 分成兩兩不相交的部分,然后以每個頂點為中心向外延伸n跳,最后使用Hadoop處理節(jié)點 之間的數(shù)據(jù)傳輸和結(jié)果收集,它的缺點主要是數(shù)據(jù)冗余度太大,數(shù)據(jù)處理速度比較慢。
[0004] 目前,對超大規(guī)模圖數(shù)據(jù)的劃分和并行分布處理還處于發(fā)展階段,現(xiàn)有的解決方 案存在一些技術(shù)問題:圖數(shù)據(jù)的劃分速度慢,劃分質(zhì)量差;此外,其無法有效地保證數(shù)據(jù)間 關(guān)系的完整性、節(jié)點數(shù)據(jù)分布的均勻性和任務(wù)負載的均衡性。
【發(fā)明內(nèi)容】
[0005] 針對現(xiàn)有技術(shù)的以上缺陷或改進需求,本發(fā)明提供了一種超大規(guī)模圖數(shù)據(jù)的劃分 與并行分布處理方法和系統(tǒng),其目的在于,通過采用基于超圖的生成樹劃分方法,并發(fā)的廣 度遍歷并等分放置路徑上的超邊數(shù)據(jù),從而兼顧數(shù)據(jù)分布的均勻性和任務(wù)負載的均衡性, 并通過采用位塊傳輸和流水線式的處理方式,解決現(xiàn)有劃分方法的劃分時間過長、劃分質(zhì) 量不高和任務(wù)負載不均衡的問題。
[0006] 為實現(xiàn)上述目的,按照本發(fā)明的一個方面,提供了一種超大規(guī)模RDF圖數(shù)據(jù)的劃 分與并行分布處理方法,包括以下步驟:
[0007] (1)對原始的RDF圖數(shù)據(jù)進行預(yù)處理,生成對應(yīng)的哈希字典文件和整形三列表數(shù) 據(jù),并將整形三列表數(shù)據(jù)轉(zhuǎn)換成關(guān)聯(lián)矩陣M ;
[0008] (2)建立關(guān)聯(lián)矩陣M的超圖模型,在該超圖模型中,M的主語、謂詞和賓語即為超 邊,與超邊相關(guān)的數(shù)據(jù)即為超邊數(shù)據(jù);
[0009] (3)判斷該RDF圖數(shù)據(jù)是連通圖還是非連通圖,如果是連通圖則轉(zhuǎn)入步驟(4),如 果是非連通圖,則將該非連通圖劃分為多個連通圖,并對每一個連通圖執(zhí)行步驟(4);
[0010] (4)基于超圖模型,并發(fā)的廣度遍歷并等分放置路徑上的超邊數(shù)據(jù),并將超邊數(shù)據(jù) 進行分類排序并等分成K份放入K個從節(jié)點上,其中K為正整數(shù),同時建立超邊數(shù)據(jù)與從節(jié) 點的映射關(guān)系;
[0011] (5)對劃分到每個從節(jié)點上的數(shù)據(jù)進行后續(xù)處理,去除冗余數(shù)據(jù),生成相應(yīng)的關(guān)聯(lián) 矩陣、統(tǒng)計信息和索引文件;
[0012] (6)各個從節(jié)點加載相應(yīng)的關(guān)聯(lián)矩陣、統(tǒng)計信息和索引文件到內(nèi)存中,并等待主節(jié) 點發(fā)送來的查詢?nèi)蝿?wù);
[0013] (7)主節(jié)點接收用戶提交的查詢?nèi)蝿?wù),并將其分解為子查詢?nèi)蝿?wù),將子查詢?nèi)蝿?wù)分 發(fā)到對應(yīng)的從節(jié)點上進行處理,最終生成投影變量數(shù)據(jù);
[0014] (8)各從節(jié)點采用位塊的方式對投影變量數(shù)據(jù)進行封裝和壓縮,并以流水線方式 將封裝和壓縮后的數(shù)據(jù)進行傳輸和后續(xù)的連接處理;
[0015] (9)將各個從節(jié)點上的中間處理結(jié)果進行差值壓縮,并將壓縮后的結(jié)果發(fā)送回主 節(jié)點;
[0016] (10)主節(jié)點接收來自各個從節(jié)點的壓縮結(jié)果,對結(jié)果進行解壓操作和最終的匯總 處理,并把匯總結(jié)果返回給用戶。
[0017] 優(yōu)選地,步驟⑷包括以下子步驟:
[0018] (4-1)獲取超圖模型中所有的謂詞,選取度數(shù)最大的謂詞作為遍歷的起始點,并獲 得該謂詞的超邊數(shù)據(jù);
[0019] (4-2)將該謂詞的超邊數(shù)據(jù)進行分類,并按照每一類別的超邊數(shù)量進行降序排 序;
[0020] (4-3)將分類排序所獲得的每一類別下的數(shù)據(jù)進行K等分切,然后放入K個從節(jié)點 上;
[0021] (4-4)將該謂詞標記為已訪問,同時建立該謂詞的超邊數(shù)據(jù)與從節(jié)點的映射關(guān) 系;
[0022] (4-5)從分類排序所獲得的類別中得到一批新的超邊,剔除已訪問的超邊,并獲取 每個主語對應(yīng)的超邊數(shù)據(jù),將每一個主語的超邊數(shù)據(jù)進行分類,并按照每一類別的超邊數(shù) 量進行降序排序;
[0023] (4-6)并發(fā)的將分類排序所獲得的每一類別下的數(shù)據(jù)進行K等分切,然后放入K個 從節(jié)點上;
[0024] (4-7)標記已訪問的超邊并建立超邊數(shù)據(jù)與從節(jié)點的映射關(guān)系;
[0025] (4-8)從分類排序所獲得的類別中又得到一批新的超邊,剔除已訪問的超邊,并獲 取每個賓語對應(yīng)的超邊數(shù)據(jù),將每一個賓語的超邊數(shù)據(jù)進行分類,并按照每一類別的超邊 數(shù)量進行降序排序;
[0026] (4-9)并發(fā)的將分類排序所獲得的每一類別下的數(shù)據(jù)進行K等分切,然后放入K個 從節(jié)點上;
[0027] (4-10)標記已訪問的超邊并建立超邊數(shù)據(jù)與從節(jié)點的映射關(guān)系;
[0028](4-11)跳轉(zhuǎn)到步驟(4-5),直至所有的超邊都遍歷完一遍為止。
[0029]優(yōu)選地,步驟(4-3)、(4-6)和(4-9)中K等分切的具體執(zhí)行標準如下,其中Deg表 示某超邊的某一分類的度:
[0030] 當(dāng)Deg〈K/2時,通過哈希生成一個節(jié)點號,然后將該分類的全部數(shù)據(jù)放入該節(jié)點 上;
[0031 ] 當(dāng)K/2 < Deg〈K時,將該分類數(shù)據(jù)進行冗余補全,使其冗余之后的Deg恰好為K,此 時就可以等分成K份;
[0032]當(dāng)Deg彡K時,直接將該分類數(shù)據(jù)等分成K份放入K個從節(jié)點上。
[0033] 優(yōu)選地,步驟(7)具體包括以下步驟:
[0034] (7-1)接收用戶提交的查詢?nèi)蝿?wù)Q;
[0035] (7-2)對查詢?nèi)蝿?wù)Q進行初步的解析,生成原始的查詢圖G ;
[0036] (7-3)根據(jù)建立的超邊數(shù)據(jù)與從節(jié)點的映射關(guān)系,對查詢圖G進行分析,初步確定 G中的每一個超邊數(shù)據(jù)的節(jié)點分布,并生成超邊數(shù)據(jù)的節(jié)點分布情況;
[0037] (7-4)根據(jù)節(jié)點分布情況來確定查詢?nèi)蝿?wù)的每一分句的節(jié)點歸屬,由此生成每個 從節(jié)點對應(yīng)的子查詢?nèi)蝿?wù);
[0038] (7-5)對于每一個子查詢?nèi)蝿?wù),判斷其是連通圖還是非連通圖,若為連通圖則轉(zhuǎn)到 步驟(7-6),若不連通,則補全所有與該子查詢?nèi)蝿?wù)的連接變量相關(guān)的語句,使之成為一個 連通圖,然后轉(zhuǎn)入步驟(7-6);
[0039] (7-6)將各個子查詢?nèi)蝿?wù)進行壓縮,并將它們分發(fā)到相應(yīng)的從節(jié)點上進行處理;
[0040] (7-7)各從節(jié)點接收相應(yīng)的數(shù)據(jù),對其進行解壓,獲取對應(yīng)的子查詢;
[0041] (7-8)各從節(jié)點利用本地的統(tǒng)計信息和索引文件生成該查詢?nèi)蝿?wù)對應(yīng)的查詢計 劃,接著執(zhí)行相應(yīng)的查詢?nèi)蝿?wù),以生成投影變量數(shù)據(jù)。
[0042] 優(yōu)選地,步驟(8)具體包括以下步驟:
[0043] (8-1)確定需要進行交互的數(shù)據(jù),即不同節(jié)點所擁有的公共變量所包含的ID段;
[0044] (8-2)比較不同節(jié)點待傳輸數(shù)據(jù)量的大小,選取數(shù)據(jù)量較小的節(jié)點作為發(fā)送方;
[0045] (8-3)將發(fā)送方的數(shù)據(jù)ID段按照連接變量進行分塊,分塊的標準是保證同一個塊 內(nèi)的ID范圍比較相近,不同塊之間的ID范圍則相隔漸遠,這里假定分成了 N塊;
[0046] (8-4)設(shè)置計數(shù)器 count = 1 ;
[0047] (8-5)將第count個數(shù)據(jù)塊轉(zhuǎn)換成相應(yīng)的位塊,通過待傳輸?shù)臄?shù)據(jù)總量確定前后 兩個ID的差值閾值D0,這里的D0用來判別當(dāng)前ID是歸入當(dāng)前位塊還是下一個位塊;
[0048] (8-6)獲取一個新ID,計算新ID與上一個ID的差值,記為Di ;若Di彡D0,則先在 位塊上填充Di_l個bit-〇,然后再填充一個bit-1,修改delta為delta+Di ;否則,一個位 塊形成,將delta值填入該位塊,傳輸該位塊,再重新生成一個位塊,將該ID填入startID, 并將delta置為1 ;
[0049] (8-7)接收方接收相應(yīng)的位塊;
[0050] (8-8)接收方解壓相應(yīng)的位塊,獲取原始ID段,并進行連接處理,與此同時發(fā)送方 在壓縮并傳輸下一個位塊,即接收方在執(zhí)行步驟(8-8)的時候,發(fā)送方在并發(fā)的執(zhí)行步驟 (8-5),形成流水線式的執(zhí)行方式;
[0051] (8-9)設(shè)置計數(shù)器 count = count+1 ;
[0052] (8-10)判斷count是否大于N,若是則進入步驟(8-11),否則返回到步驟(8-5);