Hive代码组织及架构简单介绍

jopen 7年前

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流程

  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代码组织及架构简单介绍

参考文献

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/