Hive--简介
一、什么是Hive
- Hive是建立在 Hadoop 上的数据仓库基础构架
- Hive可以用来进行数据提取转化加载(ETL)
- Hive 定义了简单的类 SQL 查询语言,称为 HQL,它允许熟悉 SQL 的用户查询数据
- Hive允许熟悉 MapReduce 开发者的开发自定义的 mapper 和 reducer 来处理内建的 mapper 和 reducer 无法完成的复杂的分析工作
- Hive是SQL解析引擎,它将SQL语句转换成MapReduce任务进行运行
- Hive的表其实就是HDFS的目录/文件
二、Hive的体系结构
1、Hive的元数据
----Hive将元数据存储在数据库中(metastore),支持oracle、mysql、derby(默认)等数据库
----Hive中的元数据包括表的名字,表的列和分区及其属性,表的属性(是否为外部表等),表的数据所在的目录等
例如:想要知道表的名字、列的名字、列的类型等信息与表中的数据没有任何关系,它只是反应了表本身的信息即元信息
在Hive中有两张表student和score,student表对应hdfs中/hive/student(Hive的表其实就是HDFS的目录/文件),元信息会默认存储在derby数据库中,同样以表的形式保存数据,比如创建一个表存表的信息,另一个表存列的信息,这两个表都存的是元信息
2、HQL的执行过程
解释器、编译器、优化器完成HQL查询语句从词法分析、语法分析、编译、优化以及查询计划(Plan)的生成。生成的计划存储在HDFS中,并在随后由MapReduce调用执行。
3、Hive的体系结构
如图中所示,总的来说,Hive是通过给用户提供的一系列交互接口,接收到用户的指令(SQL),使用自己的Driver,结合元数据(MetaStore),将这些指令翻译成MapReduce,提交到Hadoop中执行,最后,将执行返回的结果输出到用户交互接口。
(1)用户接口:Client
CLI(hiveshell)、JDBC/ODBC(java访问hive)、WEBUI(浏览器访问hive)
(2)元数据:Metastore
元数据包括:表名、表所属的数据库(默认是default)、表的拥有者、列/分区字段、表的类型(是否是外部表)、表的数据所在目录等;默认存储在自带的derby数据库中,推荐使用MySQL存储Metastore
(3)Hadoop
使用HDFS进行存储,使用MapReduce进行计算。
(4)驱动器:Driver
1)解析器(SQL Parser):将SQL字符串转换成抽象语法树AST,这一步一般都用第三方工具库完成,比如antlr;对AST进行语法分析,比如表是否存在、字段是否存在、SQL语义是否有误。
2)编译器(Physical Plan):将AST编译生成逻辑执行计划。
3)优化器(Query Optimizer):对逻辑执行计划进行优化。
4)执行器(Execution):把逻辑执行计划转换成可以运行的物理计划。对于Hive来说,就是MR/Spark。