Hive的运行时架构
1 Hive的主要组件
Hive的主要组件有3个
-
Serrializers/DeSerializers组件
-
这个组件是一个序列化框架,同时伴随着序列化与反序列化的库;其中包含着大量内置的序列化/反序列化器,同时支持用户自定义的序列化反序列化器。
-
read数据的生命周期
HDFS File -> inputformat(RecordReader) -> <k,v> -> deSerializer -> Row object
-
write数据生命周期
Row object -> serializer -> <k,v> -> outputformat(RecordWriter) -> HDFS File
-
-
-
MetaStore组件
- 这个组件管理并存储着数据仓库(Hive)中的所有的表、分区的元数据信息,默认是存储在derby数据库中,但是derby数据库在同一时间只允许一个用户访问,为了保证多用户访问元数据,建议将元数据迁移到MySQL等其它数据库。
-
QueryProcessor组件
- 这个组件一个处理框架,其中包含着自己的基础组件,可以将SQL转化成MR作业,然后交给执行的组件按照一定的依赖顺序去执行这些MR作业。
1.1 QueryProcessor组件剖析
-
解析&语义分析器
-
这个组件负责解析SQL,整个解析转化流程如下
-
SQL -> AbstractSyntaxTree(语法树)-> 执行计划 -> 最终的Task物理执行图 #这些执行图将会被Driver.java这个类启动并执行
-
-
-
优化器
- 优化器包含一些简单的优化规则,比如列裁剪、分区裁剪等。
-
编译器
- 将语言编译成可以执行的语言
-
执行引擎
- 用来执行优化之后的tasks
-
元数据访问层
- 用来访问Hive的表的元数据
-
Hive的函数组件
- 包含内置的SQL函数,同时支持用户自定义函数,并投入Hive的资源中使用。
2 其它组件
- command line interface 命令行接口
- 用来连接Hive server的服务,进行交互式访问;
- Hive server
- 提供所有的Hive服务,允许外部应用访问Hive的API;
- 公共组件
- 管理一些Java代码以及Hive的配置信息的组件;
- 基础工具
- 用来构建Hive的基础环境;
- 脚本
- 用来辅助启动Hive Cli,加载内置函数,配置信息。