Join優(yōu)化

概述

跟傳統(tǒng)的關(guān)系型數(shù)據(jù)庫(kù)類(lèi)似,分布式環(huán)境中的join在提供優(yōu)化器“hint”(提示)以告訴優(yōu)化器選擇一些執(zhí)行策略颂翼。目前一些優(yōu)化提示主要針對(duì)批處理中的連接(join)晃洒。在批處理中共有三個(gè)跟連接有關(guān)的轉(zhuǎn)換函數(shù):

  • join:默認(rèn)為等值連接(Equi-join),即我們平時(shí)看到的inner join朦乏;

  • outerjoin:外連接球及,具體細(xì)分為left-outer join、righ-outer join呻疹、full-outer join吃引;

  • cross:交叉連接,求兩個(gè)數(shù)據(jù)集的笛卡爾積。

1.算法分析

常用來(lái)實(shí)現(xiàn)連接的算法有:hash join镊尺、sort-merge join以及nested loop join朦佩,下面我們對(duì)這三種算法進(jìn)行簡(jiǎn)單介紹。首先hash算法實(shí)現(xiàn)連接時(shí)庐氮,通常分為兩個(gè)階段:

  1. build:為參與連接的兩個(gè)數(shù)據(jù)集中較小的數(shù)據(jù)集準(zhǔn)備好哈希表语稠,哈希表中的記錄包含著連接的屬性以及它對(duì)應(yīng)的行。因?yàn)楣1硎峭ㄟ^(guò)對(duì)連接屬性應(yīng)用一個(gè)哈希函數(shù)來(lái)訪問(wèn)的弄砍,因此通過(guò)它將比掃描初始數(shù)據(jù)集更快地發(fā)現(xiàn)給定的連接屬性對(duì)應(yīng)的行仙畦;

  2. probe:一旦哈希表構(gòu)建完成,會(huì)掃描更大的數(shù)據(jù)集并通過(guò)從更小的數(shù)據(jù)集匹配哈希表以發(fā)現(xiàn)相關(guān)的行输枯。

而使用sort-merge算法實(shí)現(xiàn)連接時(shí)议泵,通常也劃分為兩個(gè)階段:

  1. sort:對(duì)兩個(gè)數(shù)據(jù)集在他們的連接屬性上進(jìn)行排序;

  2. merge:合并排過(guò)序的數(shù)據(jù)集桃熄。

nested loop實(shí)現(xiàn)連接相對(duì)更容易理解先口,它使用兩層嵌套循環(huán)分別作用于兩個(gè)參與連接的數(shù)據(jù)集。

2.連接策略

通過(guò)上面的介紹瞳收,我們得知當(dāng)選擇hash算法來(lái)實(shí)現(xiàn)連接時(shí)碉京,需要確定以哪個(gè)輸入端作為build端,哪個(gè)輸入端作為probe端螟深,這是影響其執(zhí)行效率的因素之一(因?yàn)橥ǔ_x擇數(shù)據(jù)量較小的數(shù)據(jù)集作為build端)谐宙。而當(dāng)以sort-merge算法來(lái)實(shí)現(xiàn)連接時(shí),不會(huì)區(qū)分輸入端的特殊職責(zé)界弧,也就不存在build階段和probe階段凡蜻。

為了理清算法跟參與連接的輸入端的關(guān)系,F(xiàn)link將它們區(qū)分成兩種不同策略的:本地策略以及傳輸(ship)策略垢箕。其中傳輸策略表示如何移動(dòng)兩個(gè)輸入端中的數(shù)據(jù)使得它們具備連接的條件划栓;本地策略則指兩個(gè)已在本地的輸入端數(shù)據(jù)集所執(zhí)行的連接算法。

我們來(lái)解釋一下這兩種策略条获,假設(shè)有兩個(gè)待連接的數(shù)據(jù)集(R和S)忠荞。傳輸策略有如下兩種:

  1. Broadcast-Forward strategy (BF):該策略會(huì)將一個(gè)完整的數(shù)據(jù)集,比如R帅掘,廣播到數(shù)據(jù)集S的每一個(gè)分區(qū)上委煤,而數(shù)據(jù)集S的所有數(shù)據(jù)則一直處于本地,無(wú)需網(wǎng)絡(luò)傳輸修档;

  2. Repartition-Repartition strategy (RR):以相同的分區(qū)函數(shù)以及用于連接的鍵屬性分區(qū)兩個(gè)數(shù)據(jù)集R碧绞、S;

正如上面已經(jīng)提及的吱窝,本地策略也即連接的實(shí)現(xiàn)算法也有兩種:

  1. Sort-Merge-Join strategy (SM):首先對(duì)兩個(gè)輸入端的數(shù)據(jù)集在它們的連接鍵屬性上進(jìn)行排序(排序階段)讥邻,然后合并排過(guò)序的數(shù)據(jù)集(合并階段)寓免;

  2. Hybrid-Hash-Join strategy (HH):分為構(gòu)建階段和探索階段;

在不指定“Hint”的情況下计维,F(xiàn)link在進(jìn)行批處理優(yōu)化時(shí)會(huì)根據(jù)成本自動(dòng)選擇傳輸策略以及本地策略袜香。優(yōu)化器的一個(gè)關(guān)鍵特征是它會(huì)根據(jù)已經(jīng)存在的數(shù)據(jù)屬性來(lái)進(jìn)行推理。就連接運(yùn)算而言鲫惶,如果某一個(gè)輸入端的數(shù)據(jù)量遠(yuǎn)小于另一輸入端蜈首,F(xiàn)link會(huì)傾向于選擇BF傳輸策略,將較小的輸入端廣播給較大的輸入端的每一個(gè)分區(qū)欠母,并在本地策略中選擇HH且以較小的輸入端作為HH的構(gòu)建端欢策;如果優(yōu)化器得知某個(gè)(或兩個(gè))輸入端已排好序,那么生成的候選計(jì)劃將不再重分區(qū)該輸入端赏淌,此時(shí)它更傾向于選擇RR傳輸策略以及SM本地策略踩寇。

除了優(yōu)化器的自動(dòng)選擇,當(dāng)用戶(hù)對(duì)數(shù)據(jù)集非常了解的情況下六水,F(xiàn)link定義了JoinHint允許用戶(hù)為join(inner join)指定連接策略給予優(yōu)化器提示俺孙。JoinHint提供了人為選擇連接策略的靈活性,其使用方式有兩種掷贾,一種是直接指定兩個(gè)輸入端的大芯﹂:

image

另一種是直接指定連接策略:

image
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市想帅,隨后出現(xiàn)的幾起案子场靴,更是在濱河造成了極大的恐慌,老刑警劉巖港准,帶你破解...
    沈念sama閱讀 219,188評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件旨剥,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡浅缸,警方通過(guò)查閱死者的電腦和手機(jī)轨帜,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,464評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)疗杉,“玉大人阵谚,你說(shuō)我怎么就攤上這事蚕礼⊙叹撸” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 165,562評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵奠蹬,是天一觀的道長(zhǎng)朝聋。 經(jīng)常有香客問(wèn)我,道長(zhǎng)囤躁,這世上最難降的妖魔是什么冀痕? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,893評(píng)論 1 295
  • 正文 為了忘掉前任荔睹,我火速辦了婚禮,結(jié)果婚禮上言蛇,老公的妹妹穿的比我還像新娘僻他。我一直安慰自己,他們只是感情好腊尚,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,917評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布吨拗。 她就那樣靜靜地躺著,像睡著了一般婿斥。 火紅的嫁衣襯著肌膚如雪劝篷。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 51,708評(píng)論 1 305
  • 那天民宿,我揣著相機(jī)與錄音娇妓,去河邊找鬼。 笑死活鹰,一個(gè)胖子當(dāng)著我的面吹牛哈恰,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播志群,決...
    沈念sama閱讀 40,430評(píng)論 3 420
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼蕊蝗,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了赖舟?” 一聲冷哼從身側(cè)響起蓬戚,我...
    開(kāi)封第一講書(shū)人閱讀 39,342評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎宾抓,沒(méi)想到半個(gè)月后子漩,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,801評(píng)論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡石洗,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,976評(píng)論 3 337
  • 正文 我和宋清朗相戀三年幢泼,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片讲衫。...
    茶點(diǎn)故事閱讀 40,115評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡茴扁,死狀恐怖饿肺,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤载碌,帶...
    沈念sama閱讀 35,804評(píng)論 5 346
  • 正文 年R本政府宣布锌畸,位于F島的核電站敷硅,受9級(jí)特大地震影響怎棱,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜拥诡,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,458評(píng)論 3 331
  • 文/蒙蒙 一触趴、第九天 我趴在偏房一處隱蔽的房頂上張望氮发。 院中可真熱鬧,春花似錦冗懦、人聲如沸爽冕。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,008評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)扇售。三九已至,卻和暖如春嚣艇,著一層夾襖步出監(jiān)牢的瞬間承冰,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,135評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工食零, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留困乒,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,365評(píng)論 3 373
  • 正文 我出身青樓贰谣,卻偏偏與公主長(zhǎng)得像娜搂,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子吱抚,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,055評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容