UI: 用於提交查詢的客戶端,hive自帶有CLI(command line),現在推薦使用beeline DRIVER: 1.用於接收客戶端提交的SQL,並實現了session控制 2.並提供了jdbc/odbc的fetch和execute功能 COMPILER: 編譯器,負責解析SQL,並從ME ...
UI:
用於提交查詢的客戶端,hive自帶有CLI(command line),現在推薦使用beeline
DRIVER:
1.用於接收客戶端提交的SQL,並實現了session控制
2.並提供了jdbc/odbc的fetch和execute功能
COMPILER:
編譯器,負責解析SQL,並從METASTORE那裡獲取元數據生成執行計劃,然後發給DRIVER
執行計劃就是一個DAG(有向無環圖)
組件:
1.Parser:將查詢語句轉變成一個parse tree
2.Semantic Analyser:將parse tree變成一個內部的查詢表示(依然是基於查詢塊,而不是operator tree)。同時在這一步也會做語法檢查,類型檢查和類型隱式轉換
3.Logical Plan Generator:將內部的查詢表示轉變成一個邏輯計劃(包含一個operator tree),一些operator是關係代數的filter,join等,另一些是hive特定的,用於將邏輯計劃變成一系列的map/reduce job,比如reduceSink operator(出現在map-reduce邊界);這一步Optimizer也會對查詢進行優化,比如map端聚合等
4.Query Plan Genertor:將邏輯計劃轉換成一系列的map-reduce tasks.做法是,通過對operator tree遞歸遍歷,然後拆分成一系列的map/reduce task,然後提交到hadoop進行執行
METASTORE
元數據存儲,存儲數倉中的DATABASE,TABLE,PARTITION,COLUMN,SERIALIZERS和DESERIALIZERS
目的:提供數據抽象和數據發現,如果數據抽象,每次查詢的時候,用戶都需要提供數據格式,extractors和loaders。metasore的數據在表創建或重建都會更新,類似於傳統數據倉庫(這些信息存在於配置的資料庫中,一般是mysql)
EXECUTION ENGINE
DRIVER將執行計劃發給ENGINE,然後ENGINE與底層交互獲取結果後,返回給DRIVER。DRIVER再將數據發送給客戶端
這一個ENGINE設計的挺好的,以前是MAPREDUCE,現在可以是TEZ,spark,以後是否在出現新的框架,誰又說得準?!