1. 程式人生 > 其它 >HIVE原始碼(5):HQL 轉換為 MR 原始碼詳細解讀(4)

HIVE原始碼(5):HQL 轉換為 MR 原始碼詳細解讀(4)

接下來的步驟包括: 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”這個類。