HIVE原始碼(5):HQL 轉換為 MR 原始碼詳細解讀(4)
阿新 • • 發佈:2021-08-22
接下來的步驟包括:
1)將 AST 轉換為 QueryBlock 進一步轉換為 OperatorTree;
2)對 OperatorTree 進行邏輯優化(LogicalOptimizer);
3)將 OperatorTree 轉換為 TaskTree(任務樹);
4)對 TaskTree 進行物理優化(PhysicalOptimizer)。
之所以將這 4 個步驟寫在一起,是因為這幾個步驟在原始碼中存在於一個方法中。
1 compile 方法(接 2.4.2 節 compile 方法繼續往下)
2 analyze 方法
3 analyzeInternal 方法
此方法為“org.apache.hadoop.hive.ql.parse.BaseSemanticAnalyzer”抽象類的抽象方法,
我們進入實現類“org.apache.hadoop.hive.ql.parse.SemanticAnalyzer”的 analyzeInternal 方法。
4 繼續呼叫過載的 analyzeInternal 方法
注意:該段原始碼中出現的“1,2,3,4…11”均為原始碼所定義步驟,該方法程式碼雖然很長,
但是由於存在官方提供的步驟註釋,其實讀懂並不難。
5 提交任務並執行(接 2.3.8 節 runInternal 方法繼續往下)
此處接 2.3.8 節中的第二步:
6 execute 方法
7 launchTask 方法
8 runSequential 方法
9 executeTask 方法
10 execute 方法
此時我們進入了一個抽象“org.apache.hadoop.hive.ql.exec.Task”的“execute”方法,我們 則 需 要 找 到 一 個 實 現 類 的 “ execute ” 方 法 , 此 處 我 選 擇
“org.apache.hadoop.hive.ql.exec.mr.MapRedTask”這個類。