hive原始碼解析之hive執行過程

2021-06-28 02:19:08 字數 1589 閱讀 1308

儲存到相簿

2014-12-26 23:04 上傳

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中

ø dfs:   呼叫dfsprocess類,呼叫hadoop的shell介面,執行hadoop的相關命令

ø add:  呼叫addresourceprocessor  ,匯入外部的資源,只對該程序有效

ø delete: 與add對應,刪除資源 

其他  :提交給driver類,進行下一步的處理

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語法解析器是根據 上次分享的 詞法分析 生成的語法樹為基礎,進行語法解析。根據語法token的情況實現了五個具體的語法解析器。在你生成語法器的時候,semanticanalyze ctory分別針對不同的情況生成對應的某個語法器,如下 semanticanalyze ctory類 現在有五個...

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

1.入口 bin cli.sh 呼叫clidriver類進行初始化過程 處理 e,f,h等資訊,如果是 h,列印提示資訊,並退出 讀取hive的配置檔案,設定hiveconf 建立乙個控制台,進入互動模式 2.在互動方式下,讀取每乙個輸命令列,直到 為止,然後提交給processline cmd 方...

hive原始碼解析(2)之編譯前序

antlr another tool for languagerecognition 一種語言識別工具 antlr提供了一種語言工具框架 定義標示符,關鍵字 詞法分析 定義表示式 語法分析 可以將文字轉換成抽象語法樹 ast 樹的解析 樹分析器 1 詞法分析器lexer 詞法分析識別的是字元流 通過...