Hive代碼組織及架構簡單介紹
hive三個主要組件
Serialzers/Deserialzers(trunk/serde) 此組件允許用戶自己開發自定義序列化、反序列化文件解析器,hive自身也內置了一些序列化解析類。
MetaStore(trunk/metastore) 此組件是hive的元數據服務器,用來存放數據倉庫中所有表和分區的信息,hive元數據建表sql、升級sql腳本都存放在此目錄下。
Query Processor(trunk/ql) 此組件用于解析sql生成map/reduce作業,并按照先后順序執行他們(hive核心包,熟讀此包,可了解hive執行流程核心)。
其他組件
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的腳本。
hive輔助組件
trunk/conf 此目錄包涵hive配置文件hive-default.xml、hive-site.xml
trunk/data hive測試所用數據
trunk/ivy 管理hive跟hadoop各個版本之間的依賴
trunk/lib hive運行期間依賴的jar
trunk/testlibs 用于構建單元測試
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之后
Plan Components(ql/plan) 封裝內置信息,用于compiler (Parser, SemanticAnalysis and Optimizer) 之間信息傳遞
MetaData Layer (ql/metadata) 連接hive元數據倉庫,獲得hive表、分區、列詳細信息,用于編譯sql語句
Map/Reduce Execution Engine (ql/exec) 執行提交的map/reduce作業
Hadoop Record Readers hive提交hadoop作業時,文件輸入輸出工具
Hive Function Framework (ql/udf) 看名字就知道,hive內置udf
Compiler流程
- parse,語義分析, 通過antlr解析生成抽象語法樹 Driver.compile()
- sa,類型檢查與語義分析 SemanticAnalyzer.doPhase1Ctx() 。。。列名是否存在
- lpg,logic plan generator,查詢塊到邏輯操作數,SemanticAnalyzer.genPlan()。。。什么cube、rollup操作樹都在這一步完工
- lpo,logic plan optimizer,邏輯計劃優化,SemanticAnalyzer.optimizer()。。。列剪輯、謂語下推、分區剪輯等等
- ppg,physical plan generator,生成物理執行計劃,SemanticAnalyzer.genMapRedTasks()
- 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/