Hive系列之HSQL轉(zhuǎn)換成MapReduce過程

hive的庫三圆、表等數(shù)據(jù)實際是hdfs系統(tǒng)中的目錄和文件,讓開發(fā)者可以通過sql語句避咆, 像操作關(guān)系數(shù)據(jù)庫一樣操作文件內(nèi)容舟肉, 比如執(zhí)行查詢,統(tǒng)計查库,插入等操作路媚。一直很好奇hive是如何做到這些的。通過參考網(wǎng)上幾篇不錯的文檔樊销, 有點小心得分享出來整慎。主要的參考鏈接
http://tech.meituan.com/hive-sql-to-mapreduce.html
http://www.slideshare.net/recruitcojp/internal-hive
注明:本文的圖片借用slideshare內(nèi)容。

hive的整體架構(gòu)圖如下所示围苫, compiler部分負責(zé)把HiveSQL轉(zhuǎn)換成MapReduce任務(wù)裤园。

Paste_Image.png

基本轉(zhuǎn)換步驟
hiveSQL轉(zhuǎn)換成MapReduce的執(zhí)行計劃包括如下幾個步驟:
HiveSQL ->AST(抽象語法樹) -> QB(查詢塊) ->OperatorTree(操作樹)->優(yōu)化后的操作樹->mapreduce任務(wù)樹->優(yōu)化后的mapreduce任務(wù)樹

Paste_Image.png

SQL Parser:Antlr定義SQL的語法規(guī)則,完成SQL詞法够吩,語法解析比然,將SQL轉(zhuǎn)化為抽象 語法樹AST Tree;
Semantic Analyzer:遍歷AST Tree周循,抽象出查詢的基本組成單元QueryBlock强法;
Logical plan:遍歷QueryBlock万俗,翻譯為執(zhí)行操作樹OperatorTree;
Logical plan optimizer: 邏輯層優(yōu)化器進行OperatorTree變換饮怯,合并不必要的ReduceSinkOperator闰歪,減少shuffle數(shù)據(jù)量;
Physical plan:遍歷OperatorTree蓖墅,翻譯為MapReduce任務(wù)库倘;
Logical plan optimizer:物理層優(yōu)化器進行MapReduce任務(wù)的變換,生成最終的執(zhí)行計劃论矾;

step1: SQL Parser
如下圖所示教翩, sql語句可以解析為三個部分
AST中第一個部分對應(yīng)SQL語句中FROM access_log_hbase a JOIN product_hbase p ON (a.prono=p.prono)。
insert overwrite table對應(yīng)第二部分贪壳。
select a.user, a.prono, p.maker, p.price對應(yīng)第三部分饱亿。

Paste_Image.png

step2: Semantic Analyzer
這個步驟把AST轉(zhuǎn)換成基本的查詢塊QB,如下圖所示
QB的對象包括如下屬性:
aliasToTabs:保存表格別名的信息
aliasToSubq:保存子查詢的信息
qbm:保存每個輸入表的元信息闰靴,比如表在HDFS上的路徑彪笼,保存表數(shù)據(jù)的文件格式等

QBParseInfo對象包括如下屬性:
joinExpr: 保存TOK_JOIN節(jié)點信息
destToxx:保存輸出和各個操作的ASTNode節(jié)點的對應(yīng)關(guān)系。

Paste_Image.png

如下圖中蚂且, 表格別名a, p保存到aliasTotabs, 分別對應(yīng)“access_log_hbase", " product_hbase"配猫。
TOK_JOIN信息保存到ParseInfo對象:joinExpr

Paste_Image.png

下圖所示,TOK_DESTINATION節(jié)點保存到nameToDest屬性中杏死。

Paste_Image.png

下圖所示泵肄,TOK_SELECT節(jié)點保存到nameToDest屬性中。

Paste_Image.png

step3:Logical Plan
該步驟是把查詢塊QB轉(zhuǎn)換操作樹淑翼。
操作樹基本的操作符包括TableScanOperator凡伊,SelectOperator,F(xiàn)ilterOperator窒舟,JoinOperator,GroupByOperator诵盼,ReduceSinkOperator惠豺。
TableScanOperator: 掃描數(shù)據(jù)表中數(shù)據(jù),從原表中取數(shù)據(jù)风宁。
JoinOperator完成Join操作洁墙。
FilterOperator完成過濾操作, 對應(yīng)sql里面的where語句功能
ReduceSinkOperator:標志著Hive Map階段的結(jié)束戒财, Reduce階段的開始热监。
SelectOperator:reduce階段輸出select中的列
FileSinkOperator: 生成結(jié)果數(shù)據(jù)到輸出文件。

從兩個輸入表格中讀入數(shù)據(jù)饮寞, 用operator樹表示為兩個TableScanOperator節(jié)點

Paste_Image.png

Join放在reduce階段執(zhí)行孝扛, 執(zhí)行join節(jié)點前列吼,加入兩個ReduceSinkOperator節(jié)點,表示當前map階段結(jié)束苦始, 進入到reduce階段寞钥。

Paste_Image.png

selectoperator節(jié)點,從reduce節(jié)點獲取select指定的列值陌选。

Paste_Image.png

nameToDest ASTNode節(jié)點理郑,轉(zhuǎn)換為FileSinkOperator節(jié)點, 把結(jié)果寫入到目標文件咨油。

Paste_Image.png

通過上面幾個轉(zhuǎn)換步驟您炉, 最終生成的logical計劃樹。

Paste_Image.png

logical plan tree還可以通過logical plan optimizer進一步優(yōu)化役电, 優(yōu)化完成的邏輯優(yōu)化樹還有轉(zhuǎn)換成物理執(zhí)行計劃和物理執(zhí)行計劃優(yōu)化赚爵。本文不做詳細介紹, 后續(xù)有時間再補充宴霸。

PS: 查看hive sql編譯后的執(zhí)行計劃
hive> explain select * from tablename;

參考文檔:
http://tech.meituan.com/hive-sql-to-mapreduce.html
http://www.slideshare.net/recruitcojp/internal-hive
http://lxw1234.com/archives/2015/09/476.htm

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末囱晴,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子瓢谢,更是在濱河造成了極大的恐慌畸写,老刑警劉巖,帶你破解...
    沈念sama閱讀 212,332評論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件氓扛,死亡現(xiàn)場離奇詭異枯芬,居然都是意外死亡,警方通過查閱死者的電腦和手機采郎,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,508評論 3 385
  • 文/潘曉璐 我一進店門千所,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人蒜埋,你說我怎么就攤上這事淫痰。” “怎么了整份?”我有些...
    開封第一講書人閱讀 157,812評論 0 348
  • 文/不壞的土叔 我叫張陵待错,是天一觀的道長。 經(jīng)常有香客問我烈评,道長火俄,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,607評論 1 284
  • 正文 為了忘掉前任讲冠,我火速辦了婚禮瓜客,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己谱仪,他們只是感情好玻熙,可當我...
    茶點故事閱讀 65,728評論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著芽卿,像睡著了一般揭芍。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上卸例,一...
    開封第一講書人閱讀 49,919評論 1 290
  • 那天称杨,我揣著相機與錄音,去河邊找鬼筷转。 笑死姑原,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的呜舒。 我是一名探鬼主播锭汛,決...
    沈念sama閱讀 39,071評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼袭蝗!你這毒婦竟也來了唤殴?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,802評論 0 268
  • 序言:老撾萬榮一對情侶失蹤到腥,失蹤者是張志新(化名)和其女友劉穎朵逝,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體乡范,經(jīng)...
    沈念sama閱讀 44,256評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡配名,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,576評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了晋辆。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片渠脉。...
    茶點故事閱讀 38,712評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖瓶佳,靈堂內(nèi)的尸體忽然破棺而出芋膘,到底是詐尸還是另有隱情,我是刑警寧澤霸饲,帶...
    沈念sama閱讀 34,389評論 4 332
  • 正文 年R本政府宣布索赏,位于F島的核電站,受9級特大地震影響贴彼,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜埃儿,卻給世界環(huán)境...
    茶點故事閱讀 40,032評論 3 316
  • 文/蒙蒙 一器仗、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦精钮、人聲如沸威鹿。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,798評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽忽你。三九已至,卻和暖如春臂容,著一層夾襖步出監(jiān)牢的瞬間科雳,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,026評論 1 266
  • 我被黑心中介騙來泰國打工脓杉, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留糟秘,地道東北人。 一個月前我還...
    沈念sama閱讀 46,473評論 2 360
  • 正文 我出身青樓球散,卻偏偏與公主長得像尿赚,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子蕉堰,可洞房花燭夜當晚...
    茶點故事閱讀 43,606評論 2 350

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