數倉--Hive-面試之Hive架構原理

基礎性的東西,不過在回答的時候要能回答出彩來

什么是Hive

  • Hive是由Facebook開源用于解決海量結構化日志的數據統計;Hive是基于Hadoop的一個數據倉庫工具,可以將結構化的數據文件映射 成一張表,并提供類SQL查詢功能,底層計算引擎默認為Hadoop的MapReduce(本質是將sql轉化成mapreduce程序),可以將引擎更換為Spark/Tez;

Hive架構

Hive架構.PNG
  • 如圖中所示,Hive通過給用戶提供的一系列交互接口,接收到用戶的指令(SQL),使用自己的Driver,結合元數據(MetaStore),將這些指令翻譯成MapReduce,提交到Hadoop中執行,最后,將執行返回的結果輸出到用戶交互接口。
  • 1)用戶接口:Client
    • CLI(hive shell)、JDBC/ODBC(java訪問hive)、WEBUI(瀏覽器訪問hive)
  • 2)元數據:Metastore
    • 元數據包括:表名、表所屬的數據庫(默認是default)、表的擁有者、列/分區字段、表的類型(是否是外部表)、表的數據所在目錄等;
      默認存儲在自帶的derby數據庫中,推薦使用MySQL存儲Metastore
    • 推薦學習博客 數倉--Hive--元數據表結構學習
  • 3)Hadoop
    • 使用HDFS進行存儲,使用MapReduce進行計算。
  • 4)驅動器:Driver
    (1)解析器(SQL Parser):將SQL字符串轉換成抽象語法樹AST,這一步一般都用第三方工具庫完成,比如antlr;對AST進行語法分析,比如表是否存在、字段是否存在、SQL語義是否有誤。
    (2)編譯器(Physical Plan):將AST編譯生成邏輯執行計劃。
    (3)優化器(Query Optimizer):對邏輯執行計劃進行優化。
    (4)執行器(Execution):把邏輯執行計劃轉換成可以運行的物理計劃。對于Hive來說,就是MR/Spark。

Hive優點

  • 操作接口采用類SQL語法,提供快速開發的能力(簡單、容易上手);
  • 避免了去寫MapReduce,減少開發人員的學習成本;
  • 統一的元數據管理,可與impala/spark等共享元數據;
  • 易擴展(HDFS+MapReduce:可以擴展集群規模;支持自定義函數);

Hive使用場景

  • 數據的離線處理;比如:日志分析,海量結構化數據離線分析…
  • Hive的執行延遲比較高,因此hive常用于數據分析的,對實時性要求不高的場合;
  • Hive優勢在于處理大數據,對于處理小數據沒有優勢,因為Hive的執行延遲比較高。

Hive的執行流程

  • HiveQL通過CLI/web UI或者thrift 、 odbc 或 jdbc接口的外部接口提交,經過complier編譯器,運用Metastore中的元數據進行類型檢測和語法分析,生成一個邏輯方案(logical plan),然后通過簡單的優化處理,產生一個以有向無環圖DAG數據結構形式展現的map-reduce任務。

SQL轉化成MapReduce過程

  • Hive是如何將SQL轉化為MapReduce任務的,整個編譯過程分為六個階段:
    • 1-Antlr定義SQL的語法規則,完成SQL詞法,語法解析,將SQL轉化為抽象語法樹AST Tree;
    • 2-遍歷AST Tree,抽象出查詢的基本組成單元QueryBlock;
    • 3-遍歷QueryBlock,翻譯為執行操作樹OperatorTree;
    • 4-邏輯層優化器進行OperatorTree變換,合并不必要的ReduceSinkOperator,減少shuffle數據量;
    • 5-遍歷OperatorTree,翻譯為MapReduce任務;
    • 6-物理層優化器進行MapReduce任務的變換,生成最終的執行計劃。

推薦學習博客hive sql語句轉換成mapreduce

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。