简介
Hive 是一个 Hadoop 平台的上的数据仓库工具,可以将结构化的的数据映射成一张表,并提供了类似 SQL 的查询的功能。
HIve 没有集群的概念,只需要将 Hive 部署在 Hadoop 平台上就可以使用。
- Hive 由Facebook 实现并开源
- 是基于Hadoop 的一个数据仓库工具
- 可以将结构化的数据映射为一张数据库表
- 并提供HQL(Hive SQL)查询功能
- 底层数据是存储在HDFS 上
- Hive的本质是将SQL 语句转换为MapReduce 任务运行
- 使不熟悉MapReduce 的用户很方便地利用HQL 处理和计算HDFS 上的结构化的数据,适用于离线的批量数据计算。
Hive架构
基本组成
用户接口
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 任务。