Hive代碼組織及架構簡單介紹

hive三個主要組件

Serialzers/Deserialzers(trunk/serde)     此組件容許用戶本身開發自定義序列化、反序列化文件解析器,hive自身也內置了一些序列化解析類。
MetaStore(trunk/metastore)     此組件是hive的元數據服務器,用來存放數據倉庫中全部表和分區的信息,hive元數據建表sql、升級sql腳本都存放在此目錄下。
Query Processor(trunk/ql)     此組件用於解析sql生成map/reduce做業,並按照前後順序執行他們(hive核心包,熟讀此包,可瞭解hive執行流程核心)。 sql

其餘組件

Command Line Interface(trunk/cli)     此組件用於處理命令行提交做業。
Hive Server(trunk/service)     此組件全部對外api接口的服務端(經過thrift實現),可用於其餘客戶端與hive交互,好比jdbc。   
Common(trunk/common)     hive基礎代碼庫,hive各個組件信息的傳遞也是有此包HiveConf類來管理。
Ant Utilities(trunk/ant)     此組件包含一些ant任務須要的基礎代碼
Scripts(trunk/bin)     此組件包涵hive裏的全部腳本,包括hive CLI的腳本。 apache

hive輔助組件

trunk/conf     此目錄包涵hive配置文件hive-default.xml、hive-site.xml
trunk/data     hive測試所用數據
trunk/ivy     管理hive跟hadoop各個版本之間的依賴
trunk/lib     hive運行期間依賴的jar
trunk/testlibs     用於構建單元測試 api

 Query Processor(hive核心,執行引擎)

Parse and SemanticAnalysis(ql/parse)     此組件主要用於編譯sql->Abstract Syntax Trees抽象語法樹->QB->Logical Plan->Physical Plan(hive 0.11多表join count(distinct)就在此步驟出錯) 服務器

Optimizer (ql/optimizer)     基於規則,優化hive做業(not 基於cost),ColumnPruner:列裁剪,Predicate PushDown:謂詞下推:將過濾操做推至TableScanOperator以後 ide

Plan Components(ql/plan)     封裝內置信息,用於compiler (Parser, SemanticAnalysis and Optimizer) 之間信息傳遞 svn

MetaData Layer (ql/metadata) 鏈接hive元數據倉庫,得到hive表、分區、列詳細信息,用於編譯sql語句 工具

Map/Reduce Execution Engine (ql/exec)     執行提交的map/reduce做業 oop

Hadoop Record Readers     hive提交hadoop做業時,文件輸入輸出工具 單元測試

Hive Function Framework (ql/udf)     看名字就知道,hive內置udf 測試

Compiler流程

  1. parse,語義分析, 經過antlr解析生成抽象語法樹 Driver.compile()
  2. sa,類型檢查與語義分析 SemanticAnalyzer.doPhase1Ctx()  。。。列名是否存在
  3. lpg,logic plan generator,查詢塊到邏輯操做數,SemanticAnalyzer.genPlan()。。。什麼cube、rollup操做樹都在這一步完工
  4. lpo,logic plan optimizer,邏輯計劃優化,SemanticAnalyzer.optimizer()。。。列剪輯、謂語下推、分區剪輯等等
  5. ppg,physical plan generator,生成物理執行計劃,SemanticAnalyzer.genMapRedTasks()
  6. ppo,physical plan optimizer,物理執行優化,PhysicalOptimizer.optimize()

hive多表join count(distinct)異常,是由於步驟3 lpg生成的邏輯執行計劃有bug

附帶hive執行流程圖

Driver類是hive最重要的類,瞭解其run、compile、execute方法,就清楚hive的核心。 

參考文獻

hive源碼解析:http://blog.csdn.net/lpxuan151009/article/details/7956518

hive編譯解析:http://blog.csdn.net/lalaguozhe/article/details/9339679

hive開發者指南:https://cwiki.apache.org/confluence/display/Hive/DeveloperGuide

hive svn地址:http://svn.apache.org/repos/asf/hive/

相關文章
相關標籤/搜索