1. 程式人生 > 其它 >HIVE原始碼(1):HQL 是如何轉換為 MR 任務的

HIVE原始碼(1):HQL 是如何轉換為 MR 任務的

1 Hive 的核心組成介紹

1)使用者介面:Client CLI(command-line interface)、JDBC/ODBC(jdbc 訪問 hive)、WEBUI(瀏覽器訪問 hive) 2)元資料:Metastore 元資料包括:表名、表所屬的資料庫(預設是 default)、表的擁有者、列/分割槽欄位、表的型別(是否是外部表)、表的資料所在目錄等; 預設儲存在自帶的 derby 資料庫中,推薦使用 MySQL 儲存 Metastore 3)Hadoop 使用 HDFS 進行儲存,使用 MapReduce 進行計算。 4)驅動器:Driver 5)解析器(SQL Parser) 將 SQL 字串轉換成抽象語法樹 AST,這一步一般都用第三方工具庫完成,比如 antlr; 對 AST 進行語法分析,比如表是否存在、欄位是否存在、SQL 語義是否有誤。 6)編譯器(Physical Plan) 將 AST 編譯生成邏輯執行計劃。 7)優化器(Query Optimizer) 對邏輯執行計劃進行優化。 8)執行器(Execution) 把邏輯執行計劃轉換成可以執行的物理計劃。對於 Hive 來說,就是 MR/Spark。

2 HQL 轉換為 MR 任務流程說明

1.進入程式,利用Antlr框架定義HQL的語法規則,對HQL完成詞法語法解析,將HQL轉換為為AST(抽象語法樹); 2.遍歷AST,抽象出查詢的基本組成單元QueryBlock(查詢塊),可以理解為最小的查詢執行單元; 3.遍歷QueryBlock,將其轉換為OperatorTree(操作樹,也就是邏輯執行計劃),可以理解為不可拆分的一個邏輯執行單元; 4.使用邏輯優化器對OperatorTree(操作樹)進行邏輯優化。例如合併不必要的ReduceSinkOperator,減少Shuffle資料量; 5.遍歷OperatorTree,轉換為TaskTree。也就是翻譯為MR任務的流程,將邏輯執行計劃轉換為物理執行計劃; 6.使用物理優化器對TaskTree進行物理優化; 7.生成最終的執行計劃,提交任務到Hadoop叢集執行。