基本组成
用户接口
- CLI,Shell 终端命令行(Command Line Interface),采用交互形式使用 Hive 命令行与 Hive 进行交互,最常用(学习,调试,生产)
- JDBC/ODBC,是 Hive 的基于 JDBC 操作提供的客户端,用户(开发员,运维人员)通过 这连接至 Hive server 服务
- Web UI,通过浏览器访问 Hive
Thrift Server
Thrift 是 Facebook 开发的一个软件框架,可以用来进行可扩展且跨语言的服务的开发, Hive 集成了该服务,能让不同的编程语言调用 Hive 的接口元数据存储
- 元数据,通俗的讲,就是存储在 Hive 中的数据的描述信息。
- Hive 中的元数据通常包括:表的名字,表的列和分区及其属性,表的属性(内部表和 外部表),表的数据所在目录
- Metastore 默认存在自带的 Derby 数据库中。缺点就是不适合多用户操作,并且数据存 储目录不固定。数据库跟着 Hive 走,极度不方便管理
- 解决方案:通常存我们自己创建的 MySQL 库(本地 或 远程)
- Hive 和 MySQL 之间通过 MetaStore 服务交互
Driver:编译器(Compiler),优化器(Optimizer),执行器(Executor)
- Driver 组件完成 HQL 查询语句从词法分析,语法分析,编译,优化,以及生成逻辑执行 计划的生成。生成的逻辑执行计划存储在 HDFS 中,并随后由 MapReduce 调用执行
- Hive 的核心是驱动引擎, 驱动引擎由四部分组成:
(1) 解释器:解释器的作用是将 HiveSQL 语句转换为抽象语法树(AST) (2) 编译器:编译器是将语法树编译为逻辑执行计划 (3) 优化器:优化器是对逻辑执行计划进行优化 (4) 执行器:执行器是调用底层的运行框架执行逻辑执行计划
执行流程
HiveQL 通过命令行或者客户端提交,经过 Compiler 编译器,运用 MetaStore 中的元数 据进行类型检测和语法分析,生成一个逻辑方案(Logical Plan),然后通过的优化处理,产生 一个 MapReduce 任务。