Hive主要模块及调用关系
Hive工作原理
Hive的编译器
编译器主要有这么几个模块:Parser,SemanticAnalyzer,LogicPlanGenerator。
首先这些模块都是在编译器中,具体来说就是在
org.apache.hadoop.hive.ql.Driver#compile(java.lang.String, boolean)
中。
Parser
在哪调用?
Parser是在
org.apache.hadoop.hive.ql.Driver#compile(java.lang.String, boolean)
中调用的,换句话说是在编译期调用的。
调用方式是什么?
public int compile(String command, boolean resetTaskIds) {
...
ParseDriver pd = new ParseDriver();
ASTNode tree = pd.parse(command, ctx);
tree = ParseUtils.findRootNonNullToken(tree);
...
有哪些模块?
首先parse在org.apache.hadoop.hive.ql.parse包下:
- org.apache.hadoop.hive.ql.parse.ParseDriver(解析器引擎)
- org.apache.hadoop.hive.ql.parse.HiveParser(hive解析器)
- org.apache.hadoop.hive.ql.parse.ParseUtils(解析工具)
各个模块有哪些功能?
ParserDriver:
Hive采用Antlr实现SQL的词法语法解析,其中语法规则定义在.g的文件中(在org.apache.hadoop.hive.ql.parse包下,可以看到.g文件)。在0.10版本之前,Hive.g文件是一个,随着语法规则的越来越复杂,由语法规则生成的Java解析类可能超过Java类文件的最大上限,0.11版本将Hive.g文件拆成了5个文件(词法规则HiveLexer.g和4个语法规则文件)
语法文件 | 语法类 | 功能 |
---|---|---|
FromClauseParser.g | org.apache.hadoop.hive.ql.parse.HiveParser_FromClauseParser | from语法解析器 |
HiveLexer.g | org.apache.hadoop.hive.ql.parse.HiveLexer | Hive词法规则 |
HiveParser.g | org.apache.hadoop.hive.ql.parse.HiveParser | 解析规则 |
IdentifiersParser.g | org.apache.hadoop.hive.ql.parse.HiveParser_IdentifiersParser | 标示语法解析 |
SelectClauseParser.g | org.apache.hadoop.hive.ql.parse.HiveParser_SelectClauseParser | select语法解析 |
功能是什么?
工程解读
accumulo-handler(不关注)
hive-accumulo-handler工程。hive对accumulo对支持。
Apache Accumulo 是一个可靠的、可伸缩的、高性能的排序分布式的 Key-Value 存储解决方案,基于单元访问控制以及可定制的服务器端处理。使用 Google BigTable 设计思路,基于 Apache Hadoop、Zookeeper 和 Thrift 构建 。
ant(不关注)
hive-ant工程
应该是一个打包的工具,没细研究。
beeline(重点)
*hive-beeline工程
HS2的beeline客户端。用户可以通过beeline的方式连接hive。
bin(重点)
bin目录
这个目录下是hive相关的命令脚本,包括hive,beeline等等。
checkstyle
checkstyle目录
这里是代码规范相关的文件。
cli(重点)
hive-cli工程
该工程下是Hive Cli相关。
common
hive-common工程
通用common包在这个工程下。
conf
conf目录
这个目录下是配置文件模版,如hive-site.xml。
contrib(不关注)
hive-contrib工程
这里有一些hive贡献出来的实现,如行自增函数UDFRowSequence等。
data(不关注)
data目录
这里有配置还有一些测试文件等。
dev-support(不关注)
dev-support目录
这里是一些开发相关的工具,如eclipse风格配置文件等。
docs(不关注)
docs目录
这里是一些文档相关,如hive的logo图片,css样式等。
findbugs(不关注)
findbugs目录
插件FindBugs的配置文件。
hbase-handler
hive-hbase-handler工程
hive对Hbase的相关支持。
hcatalog
hive-hcatalog工程
hive对pig的支持。
hwi
hive-hwi工程
hwi是Hive Web Ui的缩写,顾名思义就是Hive的web界面相关。
itests
jdbc(重点)
hive-jdbc工程
hive对jdbc访问方式的支持。
lib
lib目录
用于存放第三方jar
metastore(重点)
metastore服务工程
hive的元数据存储服务,metastore不负责元数据的存储,只负责元数据的查询服务,元数据存储通过mysql等。
odbc(重点)
odbc工程
hive对odbc连接的支持
packaging
hive-packaging工程
打包工程,编译完的包在packaging路径下。
ql(重点)
hive-exec工程
这是hive的核心工程,Driver等都在这个工程中。
serde
hive-serde
hive对序列化相关实现。
service(重点)
hive-service
这里是通常所说的hiveserver2服务工程。
shims
hive-shims-aggregator工程
这里是hive和多版本hadoop兼容的支持。
spark-client
spark-client工程
hive对spark的支持。
testutils
testutils工程
该工程主要是一些测试项。