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集群運行。