4.1 Hive简介
简介
Apache Hive 并非数据库,也并非数据仓库,而是构建在Hadoop上的数据仓库基础工具。
- Hive提供了一系列函数操作,用于数据ETL操作。
- Hive定义了类SQL方言,允许用户以SQL方式来对HDFS中数据进行访问与计算
- Hive包含复杂的解析引擎,会将SQL解析成为MapReduce Job在集群中运行
数据存储
- Hive的应用基于HDFS
- Hive并没有专门的数据存储格式
- Hve可以默认加载文本文件
- 在针对普通文本的结构化数据进行创建表时,我们只需要指定列分隔符和行分隔符,Hive即可对结构化数据进行表映射
基础架构
自顶向下解析
- CLI:Shell命令行
- JDBC/ODBC:Hive 的Java操作方式,与使用传统数据库JDBC的方式类似
- 元数据存储(Metastore):
- 这里首先明确元数据的概念,元数据即数据的数据描述信息,更多的是指表的相关信息,包括表结构,表字段等。
- Driver:驱动中包含编译器、优化器、执行器
- 编译器:对用户书写的SQL语句进行语义分析,词法分析
- 优化器:对用户书写SQL所产生的MapReduce Job任务进行优化
- 执行器:执行最终的MapReduce任务
- Hadoop:Hive的一切使用都是基于Hadoop
在这有一点需要注意的,就是从Hive2开始,其实官方就不建议默认使用MapReduce引擎了,而是建议 使用Tez引擎或者是Spark引擎,不过目前一直到最新的3.x版本中mapreduce还是默认的执行引擎 其实大数据计算引擎是有几个发展阶段的
- 第一代:MapReduce
- 第二代:Tez,Tez的存在感比较低,它是源于MapReduce,主要和Hive结合在一 起使用,它的核心思想是将Map和Reduce两个操作进一步拆分,这些分解后的元操作可以灵活组合,产 生新的操作,这些操作经过一些控制程序组装后,可以形成一个大的作业,这样可以提高计算效率,我们 在实际工作中Hive使用的就是 Tez引擎,替换Hive的执行引擎也很简单,只需要把Tez安装好(Tez也是 支持在YARN上执行的),然后到Hive中配置一下就可以了,不管使用什么引擎,不会对我们使用hive造 成什么影响,也就说对上层的使用没有影响。
- 第三代:Spark,Spark在当时属于一个划时代的产品,改变了之前基于磁盘的计 算思路,而是采用内存计算,就是说Spark把数据读取过来以后,中间的计算结果是不会进磁盘的,一直 到出来最终结果,才会写磁盘,这样就大大提高了计算效率,而MapReduce的中间结果是会写磁盘的, 所以效率没有Spark高。Spark的执行效率号称比MapReduce 快100倍,当然这需要在一定数据规模下才 会差这么多,如果我们就计算几十兆或者几百兆的文件,你去对比发现其实也不会差多少。
- 第四代:Flink,Flink是一个可以支持纯实时数据计算的计算引擎,并且Flink也支持在Yarn上执行,只是目前Hive的计算引擎并未整合Flink相关的。
所以发现没有,MapReduce、Tez、Spark、Flink这些计算引擎都是支持在yarn上执行的,所以说 Hdoop2中对架构的拆分是非常明智的
整体架构图解析:
1.用户通过接口传递Hive SQL
2.Driver对SQL进行分析、编译,生成查询计划
3.查询计划会存储在 HDFS中,然后再通过MapReduce进行计算出结果
元数据
Hive 中的元数据包括表的名字,表的列和分区及其属性,表的属性(是否为外部表等),表的数据所在 的hdfs目录等。
元数据存储一般默认derby数据库
Derby数据库的缺点:在同一个目录下一次只能打开一个会话
使用derby存储方式时,Hive会在当前目录生成一个derby.log文件和一个metastore_db目录, metastore_db里面会存储具体的元数据信息
我们在企业中主要使用MySQL作为外置存储引擎,可供多个用户进行元数据共享。