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