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集群運行。
本文來自博客園,作者:秋華,轉載請注明原文鏈接:http://www.rzrgm.cn/qiu-hua/p/15173155.html

浙公網安備 33010602011771號