1.入口 /bin/cli.sh
呼叫clidriver類進行初始化過程
ø 處理 -e, -f,-h等資訊,如果是-h,列印提示資訊,並退出
ø 讀取hive的配置檔案,設定hiveconf
ø 建立乙個控制台,進入互動模式
2.在互動方式下,讀取每乙個輸命令列,直到』;』為止,然後提交給processline(cmd)方法處理,該方法將輸入的流以;分割成多個命令 ,然後交給processcmd(cmd)方法 。
3.processcmd(cmd) 對輸入的命令列進行判斷,根據命令的第乙個記號(token),分別進入相應的流程
ø quit or exit 系統正常退出
ø !開頭的命令列,執行作業系統命令
ø source 開頭的,讀取外部檔案,並執行檔案中的命令
ø list 列出 jar file archive
其他命令提交給commandprocess,進行命令的預處理
4.命令的預處理 commandprocess
根據輸入命令的第乙個記號,分別進行處理
ø set : 呼叫setprocess類,設定hive的環境引數,並儲存在該程序的hiveconf中
ø add: 呼叫addresourceprocessor ,匯入外部的資源,只對該程序有效
ø delete: 與add對應,刪除資源
5. 命令的處理( driver類的run方法)
(1) 編譯 complie(hive的核心部分)
ø 通過語言識別工具antlr,驗證語句的合法性
ø 將sql轉換成乙個抽象語法樹(ast)
ø 定義樹直譯器operator,將ast翻譯成邏輯操作樹
ø 呼叫genmapred方法,生成物理執行計畫
(2)獲取讀寫鎖
ø 對操作的表獲取乙個讀寫鎖acquirereadwritelocks
(3)執行 execute
ø 將生成的task提交hadoopapi 處理
ø 返回任務的執行時間和狀態(成功or失敗)
6.獲取執行的結果
ø 任務執行失敗,丟擲異常
ø 執行成功後,呼叫driver的getreuslt方法,順序開啟每乙個輸出檔案
ø 獲取每一行的輸出,並列印到控制台
7.執行清理
ø 清理hive執行過程中的中間檔案和臨時檔案
ø 退出該條命令的執行,返回控制台並等待下一條命令的輸入
其中driver類是hive最核心的類。
hive原始碼解析之hive執行過程
儲存到相簿 2014 12 26 23 04 上傳 1.入口 bin cli.sh 呼叫clidriver類進行初始化過程 處理 e,f,h等資訊,如果是 h,列印提示資訊,並退出 讀取hive的配置檔案,設定hiveconf 建立乙個控制台,進入互動模式 2.在互動方式下,讀取每乙個輸命令列,直到...
hive原始碼解析之語法解析
hive語法解析器是根據 上次分享的 詞法分析 生成的語法樹為基礎,進行語法解析。根據語法token的情況實現了五個具體的語法解析器。在你生成語法器的時候,semanticanalyze ctory分別針對不同的情況生成對應的某個語法器,如下 semanticanalyze ctory類 現在有五個...
hive原始碼解析(2)之編譯前序
antlr another tool for languagerecognition 一種語言識別工具 antlr提供了一種語言工具框架 定義標示符,關鍵字 詞法分析 定義表示式 語法分析 可以將文字轉換成抽象語法樹 ast 樹的解析 樹分析器 1 詞法分析器lexer 詞法分析識別的是字元流 通過...