「Hive進(jìn)階篇」HQL底層執(zhí)行過(guò)程及原理詳解

一、hive幾大組件
ui:用戶界面,我們提交hiveQL的命令行界面
driver:驅(qū)動(dòng)程序,接受查詢的組件
compiler:編譯器,負(fù)責(zé)將hiveQL編譯為MapReduce,對(duì)不同的查詢塊和查詢表達(dá)式進(jìn)行語(yǔ)義分析,最終借助表和元數(shù)據(jù)庫(kù)查找的分區(qū)元數(shù)據(jù) 來(lái)生成執(zhí)行計(jì)劃
metastore:元數(shù)據(jù)庫(kù),存儲(chǔ)hive各種表和分區(qū)的元數(shù)據(jù)信息
executor engine:執(zhí)行引擎,負(fù)責(zé)將compiler編譯器 編譯好的執(zhí)行計(jì)劃提交到不同的平臺(tái)上去



針對(duì)上圖的流程,我簡(jiǎn)要概述:hive的執(zhí)行入口是driver,提交的hql語(yǔ)句首先到driver,由driver來(lái)負(fù)責(zé)執(zhí)行管理,之后查找元數(shù)據(jù)信息,再調(diào)用compiler編譯器解析hql語(yǔ)句成物理計(jì)劃返回給driver,然后把物理執(zhí)行計(jì)劃連同元數(shù)據(jù)發(fā)送給執(zhí)行引擎執(zhí)行,至此這就到了hadoop層面的MapReduce程序了。



二、hiveQL編譯成MapReduce過(guò)程
這個(gè)hiveQL編譯成MapReduce的過(guò)程就是在上面的COMPILER組件里完成的。編譯過(guò)程主要有以下六個(gè)步驟:

詞法語(yǔ)法解析 ->語(yǔ)義解析 ->生成邏輯執(zhí)行計(jì)劃 ->優(yōu)化邏輯執(zhí)行計(jì)劃 ->生成物理執(zhí)行計(jì)劃 ->優(yōu)化物理執(zhí)行計(jì)劃





①詞法語(yǔ)法解析:先是由解析器解析hiveQL語(yǔ)法和詞法,生成抽象語(yǔ)法樹(shù)AST Tree;

②語(yǔ)義解析:然后遍歷抽象語(yǔ)法樹(shù),轉(zhuǎn)換為查詢單元Query Block,查詢單元是一條sql最基本的組成單元,查詢單元包含了輸入源、計(jì)算過(guò)程、輸出 三個(gè)部分;

③生成邏輯執(zhí)行計(jì)劃:遍歷查詢單元,生成操作樹(shù)Operator Tree,操作樹(shù)是由一系列操作符Opreator組成,每一個(gè)操作符完成操作后就將數(shù)據(jù)流式傳遞到下一個(gè)操作符進(jìn)行邏輯計(jì)算;

④優(yōu)化邏輯執(zhí)行計(jì)劃:邏輯層優(yōu)化器針對(duì)邏輯執(zhí)行計(jì)劃做優(yōu)化,比如合并多余的操作符,達(dá)到減少M(fèi)apReduce Job,減少數(shù)據(jù)傳輸和shuffle數(shù)據(jù)量;

⑤生成物理執(zhí)行計(jì)劃:遍歷邏輯執(zhí)行計(jì)劃,翻譯為MapReduce任務(wù),生成物理執(zhí)行計(jì)劃;

⑥優(yōu)化物理執(zhí)行計(jì)劃:物理層優(yōu)化器針對(duì)物理執(zhí)行計(jì)劃做優(yōu)化,最終生成MR job并輸出。




作者:bigdataladder


歡迎關(guān)注微信公眾號(hào) :大數(shù)據(jù)階梯之路