執(zhí)行流程詳細(xì)解析
Step 1:UI(user interface) 調(diào)用 executeQuery 接口秘狞,發(fā)送 HQL 查詢語(yǔ)句給 Driver
Step 2:Driver 為查詢語(yǔ)句創(chuàng)建會(huì)話句柄,并將查詢語(yǔ)句發(fā)送給 Compiler频祝, 等待其進(jìn)行語(yǔ)句解析并生成執(zhí)行計(jì)劃
Step 3 and 4:Compiler 從 metastore 獲取相關(guān)的元數(shù)據(jù)
Step 5:元數(shù)據(jù)用于對(duì)查詢樹(shù)中的表達(dá)式進(jìn)行類型檢查辖众,以及基于查詢謂詞調(diào)整分區(qū)昏鹃,生成計(jì)劃
Step 6 (6.1外冀,6.2生闲,6.3):由 Compiler 生成的執(zhí)行計(jì)劃是階段性的 DAG媳溺,每個(gè)階段都可能會(huì)涉及到 Map/Reduce job进每、元數(shù)據(jù)的操作麻顶、HDFS 文件的操作洗出,Execution Engine 將各個(gè)階段的 DAG 提交給對(duì)應(yīng)的組件執(zhí)行镀娶。
Step 7, 8 and 9:在每個(gè)任務(wù)(mapper / reducer)中踢涌,查詢結(jié)果會(huì)以臨時(shí)文件的方式存儲(chǔ)在 HDFS 中变骡。保存查詢結(jié)果的臨時(shí)文件由 Execution Engine 直接從 HDFS 讀取护昧,作為從 Driver Fetch API 的返回內(nèi)容庄拇。