一種基于SDD-1算法的Hive連接查詢方法
【專利摘要】本發(fā)明公開了一種基于SDD-1算法的Hive連接查詢方法,采用數(shù)據(jù)預(yù)處理和雙半連接兩種技術(shù)來(lái)實(shí)現(xiàn),數(shù)據(jù)預(yù)處理階段進(jìn)行數(shù)據(jù)傳輸前用投影等一元操作完成對(duì)數(shù)據(jù)的精簡(jiǎn),同時(shí)還對(duì)各節(jié)點(diǎn)上進(jìn)行數(shù)據(jù)的預(yù)排序;雙半連接技術(shù)是指不僅對(duì)行的數(shù)據(jù)進(jìn)行縮減,同時(shí)對(duì)列的數(shù)據(jù)進(jìn)行縮減。結(jié)果表明,本發(fā)明采用雙半連接技術(shù)能夠大大減少各個(gè)節(jié)點(diǎn)之間的數(shù)據(jù)傳輸量,從而大大減少對(duì)帶寬資源的消耗;同時(shí)采用數(shù)據(jù)歸并排序預(yù)處理,可以當(dāng)元組數(shù)達(dá)到一定規(guī)模后使響應(yīng)速度加快。
【專利說(shuō)明】—種基于SDD-1算法的Hive連接查詢方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明屬于計(jì)算機(jī)信息技術(shù)應(yīng)用領(lǐng)域,具體涉及一種基于SDD-1算法的Hive連接查詢方法。
【背景技術(shù)】
[0002]SDD-1算法是一種在傳統(tǒng)分布式關(guān)系型數(shù)據(jù)庫(kù)中廣泛應(yīng)用的查詢方法。Hive是一個(gè)基于Hadoop文件系統(tǒng)之上的數(shù)據(jù)倉(cāng)庫(kù)架構(gòu),實(shí)現(xiàn)了類似傳統(tǒng)關(guān)系數(shù)據(jù)庫(kù)的SQL語(yǔ)句查詢功能?,F(xiàn)有Hive在進(jìn)行連接查詢時(shí)采用了排序歸并算法,該算法的執(zhí)行分為Map (數(shù)據(jù)映射)階段和Reduce (數(shù)據(jù)處理)階段:Map階段對(duì)執(zhí)行連接的數(shù)據(jù)庫(kù)表按照連接屬性集中進(jìn)行排序,Reduce階段將各個(gè)Map階段生成的分段排序結(jié)果進(jìn)行歸并連接,輸出查詢結(jié)果。
[0003]上述算法存在兩個(gè)問(wèn)題=(I)Map階段產(chǎn)生的大量中間結(jié)果數(shù)據(jù)需要通過(guò)網(wǎng)絡(luò)傳輸?shù)絉educe端,會(huì)消耗大量的帶寬;(2)Reduce端需要進(jìn)行多次歸并排序操作,執(zhí)行時(shí)間較長(zhǎng)。為了更好了使用Hive進(jìn)行海量數(shù)據(jù)的連接查詢,需要在實(shí)際應(yīng)用中解決這兩個(gè)問(wèn)題。
【發(fā)明內(nèi)容】
[0004]本發(fā)明的目的在于解決Hive在進(jìn)行連接查詢時(shí)采用Hive原始連接查詢算法所存在的執(zhí)行時(shí)間長(zhǎng)和帶寬資源消耗大等問(wèn)題,提供了一種基于SDD-1算法的Hive連接查詢方法,以使Hive系統(tǒng)達(dá)到響應(yīng)快和帶寬消耗少的目的。
[0005]基于上述發(fā)明的目的,本發(fā)明的技術(shù)方案為:
一種基于SDD-1算法的Hive連接查詢方法,包括以下步驟:
1)在各個(gè)分布節(jié)點(diǎn)上執(zhí)行投影等操作,將所有可執(zhí)行的一元操作和局部操作構(gòu)成執(zhí)行策略集,對(duì)原始數(shù)據(jù)進(jìn)行精簡(jiǎn);
2)對(duì)上述的執(zhí)行策略集進(jìn)行歸并排序預(yù)處理,將每一屬性進(jìn)行排序,使其各個(gè)屬性形成一個(gè)有序的中間數(shù)據(jù)序列;
3)在Hadoop中對(duì)中間數(shù)據(jù)序列進(jìn)行Map處理;
4)使用基于行和列的雙半連接技術(shù)將Map階段產(chǎn)生的結(jié)果傳送到Reduce端;
5)在Reduce端處理來(lái)自Map端比較有序的數(shù)據(jù);
6)將查詢處理的結(jié)果返回給客戶端。
[0006]進(jìn)一步,所述步驟2)中執(zhí)行策略集進(jìn)行歸并排序預(yù)處理包括兩個(gè)階段:第一階段是對(duì)數(shù)據(jù)庫(kù)關(guān)系進(jìn)行分段排序;第二階段是對(duì)數(shù)據(jù)庫(kù)關(guān)系的子表執(zhí)行歸并操作。
[0007]進(jìn)一步,所述歸并排序預(yù)處理需要進(jìn)行多次的本地?cái)?shù)據(jù)的讀取、歸并和排序操作。
[0008]進(jìn)一步,所述步驟4)中使用基于行和列的雙半連接技術(shù)進(jìn)行數(shù)據(jù)傳輸?shù)木唧w步驟如下:
a)確定連接查詢涉及的屬性行和列;
b)結(jié)合查詢應(yīng)用通過(guò)投影操作去除與連接查詢無(wú)關(guān)行屬性和列屬性;
c)構(gòu)造多種雙半連接,分別計(jì)算傳輸代價(jià),構(gòu)建雙半連接集; d )從構(gòu)建的雙半連接集中選擇出最小的傳輸代價(jià)將Map階段產(chǎn)生的數(shù)據(jù)傳輸?shù)絉educe 端。
[0009]進(jìn)一步,還包括測(cè)試數(shù)據(jù)驗(yàn)證環(huán)節(jié),選取相應(yīng)的測(cè)試數(shù)據(jù),就CPU代價(jià)以及時(shí)間響應(yīng)同Hive原始連接查詢算法作對(duì)比。
[0010]本發(fā)明的有益結(jié)果為:本發(fā)明充分利用Hive進(jìn)行數(shù)據(jù)連接查詢時(shí)需進(jìn)行的數(shù)據(jù)傳輸和歸并排序操作的特性,采用雙半連接技術(shù)和數(shù)據(jù)歸并排序預(yù)處理技術(shù),進(jìn)而加快查詢處理速度。實(shí)驗(yàn)結(jié)果表明,本發(fā)明采用雙半連接技術(shù)能夠大大減少各個(gè)節(jié)點(diǎn)之間的數(shù)據(jù)傳輸量,從而大大減少對(duì)帶寬資源的消耗;同時(shí)采用數(shù)據(jù)歸并排序預(yù)處理,可以當(dāng)元組數(shù)達(dá)到一定規(guī)模后使響應(yīng)速度加快。
【專利附圖】
【附圖說(shuō)明】
[0011]圖1為本發(fā)明的執(zhí)行步驟流程圖;
圖2為Hive原始連接查詢算法CPU代價(jià)的示意圖;
圖3為基于SDD-1算法的Hive連接查詢方法的CPU代價(jià)的示意圖;
圖4為本發(fā)明在不同數(shù)據(jù)量下與Hive原始連接查詢算法的時(shí)間響應(yīng)對(duì)比圖。
【具體實(shí)施方式】
[0012]下面結(jié)合附圖和具體實(shí)施例,進(jìn)一步闡明本發(fā)明的【具體實(shí)施方式】。
[0013]如圖1所示,本發(fā)明提出了一種基于數(shù)據(jù)預(yù)處理和雙半連接的SDD-1改進(jìn)算法,數(shù)據(jù)預(yù)處理是指在進(jìn)行數(shù)據(jù)傳輸前用投影等一元操作完成對(duì)數(shù)據(jù)的精簡(jiǎn),同時(shí)還對(duì)各節(jié)點(diǎn)上進(jìn)行數(shù)據(jù)的預(yù)排序;雙半連接是指不僅對(duì)行的數(shù)據(jù)進(jìn)行縮減,同時(shí)對(duì)列的數(shù)據(jù)進(jìn)行縮減。該方案包括以下幾個(gè)步驟:
步驟1,在各個(gè)分布節(jié)點(diǎn)上執(zhí)行投影等操作,將所有可執(zhí)行的一元操作和局部操作構(gòu)成執(zhí)行策略集,對(duì)原始數(shù)據(jù)進(jìn)行精簡(jiǎn);
步驟2,對(duì)上述的執(zhí)行策略集進(jìn)行歸并排序預(yù)處理,將每一屬性進(jìn)行排序,使其各個(gè)屬性形成一個(gè)有序的中間數(shù)據(jù)序列;
步驟3,在Hadoop中對(duì)中間數(shù)據(jù)序列進(jìn)行Map處理;
步驟4,使用基于行和列的雙半連接技術(shù)將Map階段產(chǎn)生的結(jié)果傳送到Reduce端; 步驟5,在Reduce端處理來(lái)自Map端比較有序的數(shù)據(jù);
步驟6,將查詢處理的結(jié)果返回給客戶端。
[0014]上述步驟2中歸并排序預(yù)處理主要包括兩個(gè)階段:
第一階段是對(duì)數(shù)據(jù)庫(kù)關(guān)系進(jìn)行分段排序,即首先將需要排序的數(shù)據(jù)庫(kù)R劃分為大小為M個(gè)塊的子表,其中M是可用于排序的內(nèi)存空間的個(gè)數(shù),以塊為單位,再將子表放入每個(gè)內(nèi)存中采用快速排序等主存排序算法執(zhí)行排序操作,這樣就可以得到一個(gè)內(nèi)部已排序的子表;
第二階段是對(duì)數(shù)據(jù)庫(kù)關(guān)系的子表執(zhí)行歸并操作,即按照順序從每個(gè)排序的子表中讀取一個(gè)塊的內(nèi)容放入內(nèi)存中,在內(nèi)存中統(tǒng)一對(duì)這些塊中的記錄執(zhí)行歸并操作,每次選擇最小(最大)的記錄放入數(shù)據(jù)庫(kù)V中,同時(shí)刪除子表中相應(yīng)的記錄;當(dāng)子表在內(nèi)存中的塊被取空時(shí),從子表中順序讀取一個(gè)新的塊放入內(nèi)存中繼續(xù)執(zhí)行歸并操作。[0015]步驟4中采用基于行和列的雙半連接技術(shù)進(jìn)行數(shù)據(jù)傳輸?shù)脑敿?xì)執(zhí)行步驟如下:
a)確定連接查詢涉及的屬性行和列;
b)結(jié)合查詢應(yīng)用通過(guò)投影操作去除與連接查詢無(wú)關(guān)行屬性和列屬性;
c)構(gòu)造多種雙半連接,分別計(jì)算傳輸代價(jià),構(gòu)建雙半連接集;
d )從構(gòu)建的雙半連接集中選擇出最小的傳輸代價(jià)將Map階段產(chǎn)生的數(shù)據(jù)傳輸?shù)絉educe 端。
[0016]如圖2和圖3所示,在Iinux系統(tǒng)中對(duì)元組數(shù)3000的數(shù)據(jù)庫(kù)進(jìn)行測(cè)試(使用命令vmstat 3,每隔三秒采集一次CPU使用情況數(shù)據(jù)),可以看出基于SDD-1算法的Hive連接查詢改進(jìn)方法在數(shù)據(jù)傳輸時(shí)以本地化處理時(shí)間來(lái)?yè)Q取在不同站點(diǎn)之間的傳輸時(shí)間,與Hive原始連接查詢算法相比,其中cs、us和sy參數(shù)值較大,反映出改進(jìn)算法需要有較高的CPU使用率及I/O讀取次數(shù),因?yàn)楦倪M(jìn)算法在進(jìn)行數(shù)據(jù)預(yù)處理時(shí),需要進(jìn)行多次的本地?cái)?shù)據(jù)的讀取、歸并和排序操作,消耗了大量的系統(tǒng)資源。
[0017]如圖4所示,在搭建的Hadoop集群中對(duì)元組數(shù)從1000-8000的數(shù)據(jù)庫(kù)進(jìn)行測(cè)試。測(cè)試表明,在元組數(shù)比較少的時(shí)候,基于SDD-1算法的Hive連接查詢方法由于各節(jié)點(diǎn)進(jìn)行歸并排序需要的時(shí)間大于縮減數(shù)據(jù)和加快Reduce端的處理時(shí)間,所以查詢響應(yīng)時(shí)間相比Hive原始連接查詢算法反而增加;但隨著元組數(shù)的增加,改進(jìn)算法的優(yōu)越性開始顯現(xiàn)。量化來(lái)說(shuō),當(dāng)總元組數(shù)達(dá)到8000時(shí),改進(jìn)算法的響應(yīng)時(shí)間開始少于Hive原始連接查詢算法;而且隨著元組數(shù)的進(jìn)一步增加,響應(yīng)時(shí)間的提升幅度也隨之加大。
[0018]基于Hive的連接查詢算法原本只是在集群中節(jié)點(diǎn)上完成對(duì)所有數(shù)據(jù)的Map操作之后就直接進(jìn)行Reduce操作,從而將查詢的結(jié)果返回給用戶。本發(fā)明對(duì)其進(jìn)行了改進(jìn),大大減少在不同節(jié)點(diǎn)之間的數(shù)據(jù)傳輸量,減少帶寬的使用;同時(shí)引入預(yù)歸并排序預(yù)處理操作,使進(jìn)行Reduce操作時(shí)有一個(gè)比較有序的屬性列,從而減少Reduce端歸并排序的時(shí)間,提高查詢的效率。
[0019]應(yīng)理解上述施例僅用于說(shuō)明本發(fā)明而不用于限制本發(fā)明的范圍,在閱讀了本發(fā)明之后,本領(lǐng)域技術(shù)人員對(duì)本發(fā)明的各種等價(jià)形式的修改均落于本申請(qǐng)所附權(quán)利要求所限定的范圍。
【權(quán)利要求】
1.一種基于SDD-1算法的Hive連接查詢方法,其特征在于:包括以下步驟:. 1)在各個(gè)分布節(jié)點(diǎn)上執(zhí)行投影等操作,將所有可執(zhí)行的一元操作和局部操作構(gòu)成執(zhí)行策略集,對(duì)原始數(shù)據(jù)進(jìn)行精簡(jiǎn); . 2)對(duì)上述的執(zhí)行策略集進(jìn)行歸并排序預(yù)處理,將每一屬性進(jìn)行排序,使其各個(gè)屬性形成一個(gè)有序的中間數(shù)據(jù)序列; . 3)在Hadoop中對(duì)中間數(shù)據(jù)序列進(jìn)行Map處理; . 4)使用基于行和列的雙半連接技術(shù)將Map階段產(chǎn)生的結(jié)果傳送到Reduce端; . 5)在Reduce端處理來(lái)自Map端比較有序的數(shù)據(jù); . 6)將查詢處理的結(jié)果返回給客戶端。
2.根據(jù)權(quán)利要求1所述的基于SDD-1算法的Hive連接查詢方法,其特征在于:所述步驟2)中執(zhí)行策略集進(jìn)行歸并排序預(yù)處理包括兩個(gè)階段:第一階段是對(duì)數(shù)據(jù)庫(kù)關(guān)系進(jìn)行分段排序;第二階段是對(duì)數(shù)據(jù)庫(kù)關(guān)系的子表執(zhí)行歸并操作。
3.根據(jù)權(quán)利要求1或2所述的基于SDD-1算法的Hive連接查詢方法,其特征在于:所述歸并排序預(yù)處理需要進(jìn)行多次的本地?cái)?shù)據(jù)的讀取、歸并和排序操作。
4.根據(jù)權(quán)利要求1所述的基于SDD-1算法的Hive連接查詢方法,其特征在于:所述步驟4)中使用基于行和列的雙半連接技術(shù)進(jìn)行數(shù)據(jù)傳輸?shù)木唧w步驟如下: a)確定連接查詢涉及的屬性行和列; b)結(jié)合查詢應(yīng)用通過(guò)投影操作去除與連接查詢無(wú)關(guān)行屬性和列屬性; c)構(gòu)造多種雙半連接,分別計(jì)算傳輸代價(jià),構(gòu)建雙半連接集; d )從構(gòu)建的雙半連接集中選擇出最小的傳輸代價(jià)將Map階段產(chǎn)生的數(shù)據(jù)傳輸?shù)絉educe 端。
5.根據(jù)權(quán)利要求1所述的基于SDD-1算法的Hive連接查詢方法,其特征在于:還包括測(cè)試數(shù)據(jù)驗(yàn)證環(huán)節(jié),選取相應(yīng)的測(cè)試數(shù)據(jù),分別就CPU代價(jià)以及時(shí)間響應(yīng)同Hive原始連接查詢算法作對(duì)比。
【文檔編號(hào)】G06F17/30GK104021169SQ201410237997
【公開日】2014年9月3日 申請(qǐng)日期:2014年5月30日 優(yōu)先權(quán)日:2014年5月30日
【發(fā)明者】周蓮英, 吳淑躍, 郭遠(yuǎn), 鄭吉 , 喻志浩 申請(qǐng)人:江蘇大學(xué)