- 1、本文档共22页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
Hive代码分析
HIVE 代码分析
梁堃
2011-12-02
目录
背景2
整体架构2
主要流程4
顶级流程4
Session 管理4
命令处理器5
Driver6
编译流程6
执行流程8
编译器10
前 10
ParseDriver10
辅助类10
分析流程11
中后 11
语义分析框架12
BaseSemanticAnalyzer12
SemanticAnalyzer12
Optimizer13
遍历框架14
运行时16
Task16
Operator17
ExprNodeEvaluator19
对象模型20
总结22
背景
本文主要用于分析Hive (Data Warehouse Infrastructure from Facebook )的实现。所
有的分析基于版本0.7.1。
整体架构
Hive 的整体架构如下图所示。
如上图所示,Hive 主要分为三个层次:
1. Interfaces :这是Hive 对外提供的使用接口
主要包括命令行接口、web 接口、基于thrift 协议的服务接口、基于JDBC/ODBC 协议的数据
库接口。
2. Query Engine :这是Hive 的核心,也就是所说的查询引擎
这里,RDBMS 其实并不包含在Hive 之中,它可以是任何一个满足要求的关系数据库。它是
metastore 实际的载体。
3. Hadoop :这一部分其实并不包含在Hive 之中,它是HIVE 存储/计算的实际的载体
上图中,这三个层次之间的主要交互是:Interfaces 将字符串形式的HQL 语句传递给
QueryEngine 中的编译器;编译器将plan.xml 传递给运行时;运行时反序列化plan.xml ,执行其中
指定的任务,并将Job 提交给Hadoop。当然,除了MapReduce 任务之外,任务也可能是本地任务、
元数据任务、hdfs 任务。
Hive 的核心部分是Query Engine (在Hive 的原始Paper 中被称为Driver )。从逻辑上讲,
QeuryEngine 又可以分为三个大部分:
1. Compiler :编译器
这部分包括HQL 的Parser、SemanticAnanlyzer、Optimizer ,Task/Plan Generator
等部分。
2. Runtime :运行时
这部分包括执行QueryPlan 所需要的驱动、算子等。
3. 其它辅助工具
这里面包括各种层次的驱动/框架代码、日志、会话管理、配置管理等。
Hive-Src 的目录结构大致如下:
• cli :命令行接口的实现;
• hwi :web 接口的实现;
• service :thrift 服务接口的实现;
• odbc/jdbc :ODBC/JDBC 接口的实现;
• serde :序列化/反序列化以及Hive 数据类型的实现;
• ql :编译器/运行时的实现;
• metastore :Metastore Layer 的实现;
• common :仅包含HiveConf 的实现;
• contrib :提供了除内置以外的更多的serde、udf ;
主要流程
顶级流程
本部分介绍Hive Interfaces 部分使用Hive Query Engine 的主要流程。这里的流程是顶级
的主控流程,并不涉及执行细节。这里的流程主要来自于hive.cli。
1. 命令行参数处理:事实上,命令行参数是分两步处理的,这里处理的命令行参数是-hiveconf
x=y 类型的,对于这种参数,会设置在System.Properties 中,以便
文档评论(0)