「Hive進階篇」HQL底層執(zhí)行過程及原理詳解
一、hive幾大組件
ui:用戶界面,我們提交hiveQL的命令行界面
driver:驅動程序,接受查詢的組件
compiler:編譯器,負責將hiveQL編譯為MapReduce,對不同的查詢塊和查詢表達式進行語義分析,最終借助表和元數據庫查找的分區(qū)元數據 來生成執(zhí)行計劃
metastore:元數據庫,存儲hive各種表和分區(qū)的元數據信息
executor engine:執(zhí)行引擎,負責將compiler編譯器 編譯好的執(zhí)行計劃提交到不同的平臺上去
針對上圖的流程,我簡要概述:hive的執(zhí)行入口是driver,提交的hql語句首先到driver,由driver來負責執(zhí)行管理,之后查找元數據信息,再調用compiler編譯器解析hql語句成物理計劃返回給driver,然后把物理執(zhí)行計劃連同元數據發(fā)送給執(zhí)行引擎執(zhí)行,至此這就到了hadoop層面的MapReduce程序了。
二、hiveQL編譯成MapReduce過程
這個hiveQL編譯成MapReduce的過程就是在上面的COMPILER組件里完成的。編譯過程主要有以下六個步驟:
詞法語法解析 ->語義解析 ->生成邏輯執(zhí)行計劃 ->優(yōu)化邏輯執(zhí)行計劃 ->生成物理執(zhí)行計劃 ->優(yōu)化物理執(zhí)行計劃
①詞法語法解析:先是由解析器解析hiveQL語法和詞法,生成抽象語法樹AST Tree;
②語義解析:然后遍歷抽象語法樹,轉換為查詢單元Query Block,查詢單元是一條sql最基本的組成單元,查詢單元包含了輸入源、計算過程、輸出 三個部分;
③生成邏輯執(zhí)行計劃:遍歷查詢單元,生成操作樹Operator Tree,操作樹是由一系列操作符Opreator組成,每一個操作符完成操作后就將數據流式傳遞到下一個操作符進行邏輯計算;
④優(yōu)化邏輯執(zhí)行計劃:邏輯層優(yōu)化器針對邏輯執(zhí)行計劃做優(yōu)化,比如合并多余的操作符,達到減少MapReduce Job,減少數據傳輸和shuffle數據量;
⑤生成物理執(zhí)行計劃:遍歷邏輯執(zhí)行計劃,翻譯為MapReduce任務,生成物理執(zhí)行計劃;
⑥優(yōu)化物理執(zhí)行計劃:物理層優(yōu)化器針對物理執(zhí)行計劃做優(yōu)化,最終生成MR job并輸出。
作者:bigdataladder
歡迎關注微信公眾號 :大數據階梯之路