本發(fā)明涉及分布式數(shù)據(jù)計(jì)算技術(shù),尤其涉及一種基于流水線的分布式多表連接方法及系統(tǒng)。
背景技術(shù):
大數(shù)據(jù)時(shí)代的到來(lái),帶動(dòng)了數(shù)據(jù)量的迅猛增長(zhǎng),急需一種技術(shù)來(lái)存儲(chǔ)和處理如此龐大的數(shù)據(jù)量,由此,谷歌的dfs(分布式文件系統(tǒng))和分布式計(jì)算模型mapreduce(映射和規(guī)約)應(yīng)運(yùn)而生,如今分布式計(jì)算技術(shù)已成為海量數(shù)據(jù)存儲(chǔ)分析的主流技術(shù)。對(duì)于海量數(shù)據(jù)分析,連接查詢是一種重要的操作,并且在實(shí)際應(yīng)用時(shí),所需的數(shù)據(jù)可能不僅僅局限于某一個(gè)表,而是涉及到多個(gè)表,這給連接操作帶來(lái)了一定的難度。
在執(zhí)行連接查詢之前,首先要對(duì)相應(yīng)數(shù)據(jù)進(jìn)行分割,通常的做法是對(duì)數(shù)據(jù)進(jìn)行哈希分割或范圍分割?,F(xiàn)有技術(shù)中提出了一種自適應(yīng)的分割方法。此方法使用了一種雙階段的分割算法對(duì)數(shù)據(jù)進(jìn)行了基于屬性的分割:第一階段,依據(jù)連接屬性對(duì)最頂層數(shù)據(jù)進(jìn)行分割;第二階段,依據(jù)數(shù)據(jù)規(guī)模和規(guī)約器(reduce)個(gè)數(shù)對(duì)底層數(shù)據(jù)進(jìn)行進(jìn)一步的分割。這樣的分割算法保證了每一個(gè)分割樹(shù)都包含單一的連接屬性。當(dāng)這種自適應(yīng)的分割算法檢測(cè)到一個(gè)包含著新的連接屬性的輸入查詢時(shí),它將以同樣的雙階段方法生成一個(gè)新的分割樹(shù),該分割樹(shù)以新的查詢操作包含的連接屬性為劃分依據(jù),并且初始狀態(tài)為空。隨著查詢操作的進(jìn)行,這種分割算法將隨機(jī)地從舊的分割樹(shù)中選取適當(dāng)規(guī)模的數(shù)據(jù)進(jìn)行重分割,并逐漸地將數(shù)據(jù)移動(dòng)到新的分割樹(shù)中,直至新的分割樹(shù)中包含的數(shù)據(jù)滿足新的查詢操作。這種基于雙階段的自適應(yīng)分割算法可以有效地對(duì)數(shù)據(jù)進(jìn)行基于連接屬性的分割,并且避免了出現(xiàn)包含新的連接屬性的查詢操作時(shí),全部數(shù)據(jù)的重新分割,實(shí)現(xiàn)了自適應(yīng)。
然而,這種自適應(yīng)分割算法主要針對(duì)兩表連接的情況,如將其應(yīng)用于多表連接上,則需要首先執(zhí)行前兩個(gè)表的連接操作,再把連接的結(jié)果看作一個(gè)新的表,和下一個(gè)表進(jìn)行連接,以此類推,直到完成所有表的連接。顯然這會(huì)產(chǎn)生大量的中間結(jié)果,造成很大的i/o開(kāi)銷,是一種效率極低的方法,而在實(shí)際應(yīng)用中,多表連接又是非常常見(jiàn)的操作。
技術(shù)實(shí)現(xiàn)要素:
本發(fā)明要解決的技術(shù)問(wèn)題是,針對(duì)現(xiàn)有的數(shù)據(jù)分割方法在應(yīng)用于對(duì)多表進(jìn)行連接時(shí)效率低的缺陷,提供一種基于流水線的分布式多表連接方法及系統(tǒng)。
為了解決上述技術(shù)問(wèn)題,本發(fā)明提供了一種基于流水線的分布式多表連接方法,該方法包括并行執(zhí)行的以下步驟:
a、映射處理單元從分布式文件系統(tǒng)讀取待連接表,將所述待連接表進(jìn)行映射處理后得到對(duì)應(yīng)的數(shù)據(jù)塊,并以每?jī)蓚€(gè)待連接表為一組,將第一組表的數(shù)據(jù)塊輸出至第一規(guī)約處理單元,將第二組至末尾組表的數(shù)據(jù)塊按序輸出至第二規(guī)約處理單元;
b、第二規(guī)約處理單元按序讀取第二組至末尾組表的數(shù)據(jù)塊,并對(duì)每組表的兩個(gè)數(shù)據(jù)塊進(jìn)行哈希連接得到每組表的兩表連接結(jié)果;
c、第一規(guī)約處理單元讀取第一組表的兩個(gè)數(shù)據(jù)塊進(jìn)行哈希連接后作為初始的多表連接結(jié)果,并在等待第二規(guī)約處理單元完成一組表的哈希連接后,將當(dāng)前的多表連接結(jié)果與該組表的兩表連接結(jié)果進(jìn)行順序連接以更新多表連接結(jié)果,直至所有組表完成連接后輸出多表連接結(jié)果。
在根據(jù)本發(fā)明所述的基于流水線的分布式多表連接方法中,所述步驟a包括以下步驟:
在t1時(shí)刻,映射處理單元讀取待連接表t1至t4,對(duì)所述待連接表t1至t4進(jìn)行映射處理后得到對(duì)應(yīng)的數(shù)據(jù)塊b1至b4,并將第一組表的數(shù)據(jù)塊b1和b2輸出至所述第一規(guī)約處理單元,將第二組表的數(shù)據(jù)塊b3和b4輸出至所述第二規(guī)約處理單元;
在ti時(shí)刻,其中i=2,3,…,j-1,j為待連接表的組數(shù);映射處理單元讀取待連接表t2i+1和t2i+2,對(duì)所述待連接表t2i+1和t2i+2進(jìn)行映射處理后得到第i+1組表的數(shù)據(jù)塊b2i+1至b2i+2,并輸出至第二規(guī)約處理單元。
在根據(jù)本發(fā)明所述的基于流水線的分布式多表連接方法中,所述步驟b包括以下步驟:在ti時(shí)刻,其中i=2,3,…,j;第二規(guī)約處理單元讀取第i組表的數(shù)據(jù)塊b2i-1至b2i進(jìn)行哈希連接后得到第i組表的兩表連接結(jié)果hi。
在根據(jù)本發(fā)明所述的基于流水線的分布式多表連接方法中,所述步驟c包括以下步驟:
在t2時(shí)刻,第一規(guī)約處理單元讀取第一組表的數(shù)據(jù)塊b1至b2進(jìn)行哈希連接后作為初始的多表連接結(jié)果s1;
在ti時(shí)刻,其中i=3,4,…,j+1;第一規(guī)約處理單元在等待第二規(guī)約處理單元完成第i-1組表的哈希連接后,將當(dāng)前的多表連接結(jié)果si-2與第i-1組表的兩表連接結(jié)果hi-1進(jìn)行順序連接得到更新的多表連接結(jié)果si-1。
在根據(jù)本發(fā)明所述的基于流水線的分布式多表連接方法中,所述步驟a中還包括:在判斷待連接表的總數(shù)n為奇數(shù)時(shí),在待連接表中增加一個(gè)空表,且待連接表的組數(shù)
在根據(jù)本發(fā)明所述的基于流水線的分布式多表連接方法中,所述步驟a的映射處理為自適應(yīng)的雙階段分割。
在根據(jù)本發(fā)明所述的基于流水線的分布式多表連接方法中,所述自適應(yīng)的雙階段分割包括:在第一階段依據(jù)連接屬性對(duì)頂層數(shù)據(jù)進(jìn)行分割;在第二階段依據(jù)數(shù)據(jù)規(guī)模和規(guī)約器的個(gè)數(shù)對(duì)底層數(shù)據(jù)進(jìn)行分割。
本發(fā)明還提供了一種基于流水線的分布式多表連接系統(tǒng),包括:
映射處理單元,用于從分布式文件系統(tǒng)讀取待連接表,將所述待連接表進(jìn)行映射處理后得到對(duì)應(yīng)的數(shù)據(jù)塊,并以每?jī)蓚€(gè)待連接表為一組,將第一組表的數(shù)據(jù)塊輸出至第一規(guī)約處理單元,將第二組至末尾組表的數(shù)據(jù)塊按序輸出至第二規(guī)約處理單元;
第二規(guī)約處理單元,用于按序讀取所述第二組至末尾組表的數(shù)據(jù)塊,并對(duì)每組表的兩個(gè)數(shù)據(jù)塊進(jìn)行哈希連接得到每組表的兩表連接結(jié)果;
第一規(guī)約處理單元,用于讀取第一組表的兩個(gè)數(shù)據(jù)塊進(jìn)行哈希連接后作為初始的多表連接結(jié)果,并在等待第二規(guī)約處理單元完成一組表的哈希連接后,將當(dāng)前的多表連接結(jié)果與該組表的兩表連接結(jié)果進(jìn)行順序連接以更新多表連接結(jié)果,直至所有組表完成連接后輸出多表連接結(jié)果。
在根據(jù)本發(fā)明所述的基于流水線的分布式多表連接系統(tǒng)中,所述映射處理單元還在判斷待連接表的總數(shù)n為奇數(shù)時(shí),在待連接表中增加一個(gè)空表,則待連接表的組數(shù)
在根據(jù)本發(fā)明所述的基于流水線的分布式多表連接系統(tǒng)中,所述映射處理單元執(zhí)行的映射處理為自適應(yīng)的雙階段分割。
實(shí)施本發(fā)明的基于流水線的分布式多表連接方法及系統(tǒng),具有以下有益效果:本發(fā)明通過(guò)并行執(zhí)行的流水線實(shí)現(xiàn)多表連接,采用調(diào)度器對(duì)流水線中的多個(gè)任務(wù)進(jìn)行有序、高效的調(diào)度,避免了兩兩連接中產(chǎn)生過(guò)多中間結(jié)果、i/o開(kāi)銷過(guò)大的情況,可以快速高效地實(shí)現(xiàn)多個(gè)表的連接。
附圖說(shuō)明
圖1為根據(jù)本發(fā)明的基于流水線的分布式多表連接系統(tǒng)的結(jié)構(gòu)圖;
圖2為根據(jù)本發(fā)明的基于流水線的分布式多表連接方法的任務(wù)流水線圖。
具體實(shí)施方式
為使本發(fā)明實(shí)施例的目的、技術(shù)方案和優(yōu)點(diǎn)更加清楚,下面將結(jié)合本發(fā)明實(shí)施例中的附圖,對(duì)本發(fā)明實(shí)施例中的技術(shù)方案進(jìn)行清楚、完整地描述,顯然,所描述的實(shí)施例是本發(fā)明的一部分實(shí)施例,而不是全部的實(shí)施例?;诒景l(fā)明中的實(shí)施例,本領(lǐng)域普通技術(shù)人員在沒(méi)有做出創(chuàng)造性勞動(dòng)的前提下所獲得的所有其他實(shí)施例,都屬于本發(fā)明保護(hù)的范圍。
本發(fā)明提供了一種基于流水線的分布式多表連接方法,通過(guò)并行執(zhí)行兩條流水線,既實(shí)現(xiàn)了查詢操作時(shí)的自適應(yīng)分割,又能快速高效的完成。
請(qǐng)參閱圖1,為根據(jù)本發(fā)明的基于流水線的分布式多表連接系統(tǒng)的結(jié)構(gòu)圖。mapreduce(映射規(guī)約)是現(xiàn)有應(yīng)用于大規(guī)模數(shù)據(jù)處理的一種系統(tǒng)架構(gòu),至少包括映射處理(map)和規(guī)約處理(reduce)。該基于流水線的分布式多表連接系統(tǒng)至少包括:映射處理單元map、第一規(guī)約處理單元r1和第二規(guī)約處理單元r2。其中映射處理單元map用于從分布式文件系統(tǒng)hdfs讀取初始數(shù)據(jù),并進(jìn)行映射處理后,產(chǎn)生中間數(shù)據(jù)存入隨機(jī)存儲(chǔ)器(ram),隨后通過(guò)合并(combine)和分區(qū)(partitioner),輸出中間結(jié)果至對(duì)應(yīng)規(guī)約分區(qū)的對(duì)應(yīng)緩沖區(qū),如圖1中的d1和d2。第一規(guī)約處理單元r1和第二規(guī)約處理單元r2分別從各自對(duì)應(yīng)的分區(qū)讀取數(shù)據(jù)并完成規(guī)約處理。本發(fā)明中的映射處理單元map、第一規(guī)約處理單元r1和第二規(guī)約處理單元r2均可以由各自的機(jī)器集群實(shí)現(xiàn),分別稱為映射機(jī)器群、第一規(guī)約機(jī)器群和第二規(guī)約機(jī)器群。
本發(fā)明第一方面,提供了一種基于流水線的分布式多表連接方法。主要包括并行執(zhí)行的以下步驟:
a、映射處理單元map從分布式文件系統(tǒng)讀取待連接表,將待連接表進(jìn)行映射處理后得到對(duì)應(yīng)的數(shù)據(jù)塊,并以每?jī)蓚€(gè)待連接表為一組,將第一組表的數(shù)據(jù)塊輸出至第一規(guī)約處理單元r1,將第二組至末尾組表的數(shù)據(jù)塊按序輸出至第二規(guī)約處理單元r2。該步驟中映射處理為,所述步驟a的映射處理為自適應(yīng)的雙階段分割。該自適應(yīng)的雙階段分割包括:首先,在第一階段依據(jù)連接屬性對(duì)頂層數(shù)據(jù)進(jìn)行分割;其次,在第二階段依據(jù)數(shù)據(jù)規(guī)模和規(guī)約(reduce)器的個(gè)數(shù)對(duì)底層數(shù)據(jù)進(jìn)行進(jìn)一步的分割。這樣的分割算法保證了每一個(gè)分割樹(shù)都包含單一的連接屬性。當(dāng)查詢操作中出現(xiàn)新的連接屬性時(shí),以同樣的雙階段方法生成一個(gè)包含新連接屬性的分割樹(shù),隨著查詢操作的進(jìn)行隨機(jī)地從舊的分割樹(shù)中選取適當(dāng)規(guī)模的數(shù)據(jù)進(jìn)行重分割,并逐漸地將數(shù)據(jù)移動(dòng)到新的分割樹(shù)中,直至新的分割樹(shù)中包含的數(shù)據(jù)滿足新的查詢操作。
假設(shè)讀取的待連接表為t1、t2、t3、t4……tn,n為待連接表的總數(shù),將待連接表以兩個(gè)為一組劃分為j組表。在本發(fā)明的一種優(yōu)選實(shí)施方式中,在向分布式文件系統(tǒng)輸入待連接表t1至tn時(shí),便檢測(cè)如n是否為奇數(shù),如果是則增加一個(gè)空表。在本發(fā)明的另一種優(yōu)選實(shí)施方式中,步驟a在分組時(shí)還包括以下步驟:在判斷待連接表的總數(shù)n為奇數(shù)時(shí),在待連接表中增加一個(gè)空表,則待連接表的組數(shù)
在t1時(shí)刻,映射處理單元map讀取待連接表t1至t4,對(duì)待連接表t1至t4進(jìn)行自適應(yīng)的雙階段分割后得到對(duì)應(yīng)的數(shù)據(jù)塊b1至b4,并將第一組表的數(shù)據(jù)塊b1和b2輸出至第一規(guī)約處理單元r1,將第二組表的數(shù)據(jù)塊b3和b4輸出至所述第二規(guī)約處理單元r2。
在ti時(shí)刻,其中i=2,3,…,j-1,j為待連接表的組數(shù);映射處理單元map讀取待連接表t2i+1和t2i+2,對(duì)所述待連接表t2i+1和t2i+2進(jìn)行映射處理后得到第i+1組表的數(shù)據(jù)塊b2i+1至b2i+2,并輸出至第二規(guī)約處理單元r2。
b、第二規(guī)約處理單元r2按序讀取第二組至末尾組表的數(shù)據(jù)塊,并對(duì)每組表的兩個(gè)數(shù)據(jù)塊進(jìn)行哈希連接得到每組表的兩表連接結(jié)果。
該步驟b包括分時(shí)執(zhí)行的以下步驟:
在ti時(shí)刻,其中i=2,3,…,j;第二規(guī)約處理單元r2讀取第i組表的數(shù)據(jù)塊b2i-1至b2i進(jìn)行哈希連接后得到第i組表的兩表連接結(jié)果hi。
c、第一規(guī)約處理單元r1讀取第一組表的兩個(gè)數(shù)據(jù)塊進(jìn)行哈希連接后作為初始的多表連接結(jié)果,并在等待第二規(guī)約處理單元r2完成一組表的哈希連接后,將當(dāng)前的多表連接結(jié)果與該組表的兩表連接結(jié)果進(jìn)行順序連接以更新多表連接結(jié)果,直至所有組表完成連接后輸出多表連接結(jié)果。
該步驟c包括分時(shí)執(zhí)行的以下步驟:
在t2時(shí)刻,第一規(guī)約處理單元r1讀取第一組表的數(shù)據(jù)塊b1至b2進(jìn)行哈希連接后作為初始的多表連接結(jié)果s1。
在ti時(shí)刻,其中i=3,4,…,j+1;第一規(guī)約處理單元r1在等待第二規(guī)約處理單元r2完成第i-1組表的哈希連接后,將當(dāng)前的多表連接結(jié)果si-2與第i-1組表的兩表連接結(jié)果hi-1進(jìn)行順序連接得到更新的多表連接結(jié)果si-1。該順序連接是指先讀取待連接表中的所有key值,再選擇key值相同的進(jìn)行連接操作。
因此,本發(fā)明通過(guò)雙階段的方法對(duì)數(shù)據(jù)進(jìn)行動(dòng)態(tài)的劃分,并且并行執(zhí)行兩條mapreduce任務(wù)流水線,采用調(diào)度器對(duì)流水線中的多個(gè)mapreduce任務(wù)進(jìn)行有序、高效的調(diào)度,最終實(shí)現(xiàn)自適應(yīng)的多表連接。本發(fā)明的任務(wù)流水線圖如圖2所示,包括以下步驟:
步驟一:在t1時(shí)刻,映射處理單元map從hdfs上讀取待連接表t1、t2、t3、t4,在t1時(shí)間段內(nèi)完成對(duì)這四個(gè)表的自適應(yīng)的雙階段分割,得到對(duì)應(yīng)的數(shù)據(jù)塊b1、b2、b3、b4,并將第一組表的數(shù)據(jù)塊b1和b2輸出至所述第一規(guī)約處理單元r1,將第二組表的數(shù)據(jù)塊b3和b4輸出至所述第二規(guī)約處理單元r2。
步驟二:在t2時(shí)刻,映射處理單元map完成對(duì)待連接表t5、t6的雙階段分割得到數(shù)據(jù)塊b5、b6,同時(shí)第一規(guī)約處理單元r1完成對(duì)數(shù)據(jù)塊b1、b2的哈希連接,得到第1組表的兩表連接結(jié)果作為初級(jí)的多表連接結(jié)果s1;第二規(guī)約處理單元r2完成對(duì)數(shù)據(jù)塊b3、b4的哈希連接操作,得到第2組表的兩表連接結(jié)果h2。
步驟四:在t3時(shí)刻,映射處理單元map完成對(duì)待連接表t7、t8的雙階段分割得到數(shù)據(jù)塊b7、b8;同時(shí)第一規(guī)約處理單元r1將初級(jí)的多表連接結(jié)果s1和兩表連接結(jié)果h2進(jìn)行順序連接后得到多表連接結(jié)果s2;同時(shí)在第二規(guī)約處理單元r2上完成對(duì)b5、b6的哈希連接,得到第3組表的兩表連接結(jié)果h3。
步驟五:在t4時(shí)刻,映射處理單元map完成對(duì)待連接表t9、t10的雙階段分割得到數(shù)據(jù)塊b9、b10;同時(shí)第一規(guī)約處理單元r1完成s2和h3的順序連接得到多表連接結(jié)果s3;同時(shí)第二規(guī)約處理單元r2上完成對(duì)b7、b8的哈希連接,得到第4組表的兩表連接結(jié)果h4。
步驟六:以此類推,流水線一直運(yùn)行下去,直到完成所有表的連接。
也就是說(shuō),為了控制集群中機(jī)器的任務(wù)分配,本發(fā)明引入一個(gè)調(diào)度器來(lái)控制流水線上各個(gè)操作執(zhí)行的時(shí)間點(diǎn),該調(diào)度器維護(hù)著一個(gè)記錄集群中所有機(jī)器信息的調(diào)度表,該調(diào)度表記錄著機(jī)器執(zhí)行何種任務(wù)以及機(jī)器是否忙碌等信息。映射處理單元執(zhí)行的是所有表的雙階段分割操作,當(dāng)映射處理單元執(zhí)行完一組表的分割操作后,調(diào)度器按順序把下一組表發(fā)送給它繼續(xù)執(zhí)行。第一規(guī)約處理單元r1執(zhí)行的是b1、b2數(shù)據(jù)塊的哈希連接和所有表的順序連接操作。當(dāng)?shù)谝灰?guī)約處理單元r1完成b1、b2的哈希連接后,它向調(diào)度器詢問(wèn)第二規(guī)約處理單元r2上b3、b4的哈希連接是否也已完成連接,若完成則第一規(guī)約處理單元r2接著執(zhí)行s1和h2的順序連接,否則進(jìn)入等待狀態(tài),并持續(xù)向調(diào)度器發(fā)起詢問(wèn),直到第二規(guī)約處理單元r2完成連接。第二規(guī)約處理單元r2執(zhí)行的是除b1、b2外其他所有表的哈希連接。
本發(fā)明還相應(yīng)提供了上述基于流水線的分布式多表連接系統(tǒng)。
其中映射處理單元map從分布式文件系統(tǒng)讀取待連接表,將待連接表進(jìn)行映射處理后得到對(duì)應(yīng)的數(shù)據(jù)塊,并以每?jī)蓚€(gè)待連接表為一組,將第一組表的數(shù)據(jù)塊輸出至第一規(guī)約處理單元r1,將第二組至末尾組表的數(shù)據(jù)塊按序輸出至第二規(guī)約處理單元r2。該映射處理單元map的實(shí)現(xiàn)原理及過(guò)程與前述方法中步驟a一致。
第二規(guī)約處理單元r2與映射處理單元map連接,用于按序讀取第二組至末尾組表的數(shù)據(jù)塊,并對(duì)每組表的兩個(gè)數(shù)據(jù)塊進(jìn)行哈希連接得到每組表的兩表連接結(jié)果。該第二規(guī)約處理單元r2的實(shí)現(xiàn)原理及過(guò)程與前述方法中步驟b一致。
第一規(guī)約處理單元r1與映射處理單元map連接,用于讀取第一組表的兩個(gè)數(shù)據(jù)塊進(jìn)行哈希連接后作為初始的多表連接結(jié)果,并在等待第二規(guī)約處理單元r2完成一組表的哈希連接后,將當(dāng)前的多表連接結(jié)果與該組表的兩表連接結(jié)果進(jìn)行順序連接以更新多表連接結(jié)果,直至所有組表完成連接后輸出多表連接結(jié)果。該第一規(guī)約處理單元r1的實(shí)現(xiàn)原理及過(guò)程與前述方法中步驟c一致。
在本發(fā)明優(yōu)選地實(shí)施方式中,該系統(tǒng)中還可以包括作業(yè)調(diào)度單元,用于存儲(chǔ)調(diào)度表,并根據(jù)該調(diào)度表發(fā)送指令控制系統(tǒng)中其它單元的任務(wù)調(diào)度,實(shí)現(xiàn)調(diào)度器的功能。相應(yīng)地,第二規(guī)約處理單元r2在對(duì)每組表的兩個(gè)數(shù)據(jù)塊進(jìn)行哈希連接得到每組表的兩表連接結(jié)果后返回完成信息給作業(yè)調(diào)度單元。第一規(guī)約處理單元r1在讀取第一組表的兩個(gè)數(shù)據(jù)塊進(jìn)行哈希連接后作為初始的多表連接結(jié)果后,向作業(yè)調(diào)度單元詢問(wèn)第二規(guī)約處理單元r2是否完成一組表的哈希連接,否則繼續(xù)等待,是則將當(dāng)前的多表連接結(jié)果與該組表的兩表連接結(jié)果順序連接以更新多表連接結(jié)果,直至所有組表完成連接后輸出多表連接結(jié)果。
綜上所述,本發(fā)明在規(guī)約機(jī)器群中進(jìn)行的哈希連接不同于傳統(tǒng)的依據(jù)key值進(jìn)行的順序連接,而是將待連接的數(shù)據(jù)庫(kù)bi、bi+1中的bi構(gòu)建哈希表,再將哈希表與bi+1進(jìn)行連接,這將大大減少讀取磁盤的次數(shù)。因此本發(fā)明采用流水線模型將自適應(yīng)的雙階段分割方法應(yīng)用于多表連接上,通過(guò)并行執(zhí)行兩條任務(wù)流水線,采用調(diào)度器對(duì)流水線中的多個(gè)mapreduce任務(wù)進(jìn)行有序、高效的調(diào)度,避免了兩兩連接中產(chǎn)生過(guò)多中間結(jié)果,i/o開(kāi)銷過(guò)大的情況,可以快速高效地實(shí)現(xiàn)多個(gè)表的連接。并且與傳統(tǒng)的依據(jù)key值或依據(jù)范圍的分割算法相比,這種方法既保證了每一個(gè)數(shù)據(jù)樹(shù)都有唯一的連接屬性,又具有自適應(yīng)的特點(diǎn)。
最后應(yīng)說(shuō)明的是:以上實(shí)施例僅用以說(shuō)明本發(fā)明的技術(shù)方案,而非對(duì)其限制;盡管參照前述實(shí)施例對(duì)本發(fā)明進(jìn)行了詳細(xì)的說(shuō)明,本領(lǐng)域的普通技術(shù)人員應(yīng)當(dāng)理解:其依然可以對(duì)前述各實(shí)施例所記載的技術(shù)方案進(jìn)行修改,或者對(duì)其中部分技術(shù)特征進(jìn)行等同替換;而這些修改或者替換,并不使相應(yīng)技術(shù)方案的本質(zhì)脫離本發(fā)明各實(shí)施例技術(shù)方案的精神和范圍。