hive原始碼解析(1)之hive執行過程

2021-06-09 05:24:18 字數 1427 閱讀 2065

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 詞法分析識別的是字元流 通過...