Hive本质是什么?
1.Hive是分布式数据仓库,同时又是查询引擎,所有Spark SQL取代只是Hive查询引擎,在企业中Hive + Spark SQL是目前最为经典的数据分析组合。
2.Hive本身是一个单机版本软件,主要负责:
a) 把HQL翻译成Mapper(s)-Reducer-Mapper(s)代码,并且可能产生很多MapReduces的Job
b) 把生产的MapReduce代码及相关资源打包成Jar,发布到Hadoop集群中运行(这一切都是自动的)
3.Hive的架构
Hive安装和配置
1.export 环境变量
2.vim hive-env.sh
export HADOOP_HOME
3.vim hive.site.xml
hive.site.xml指定Hive数据仓库的具体的具体存储。
4.安装MySQL
5.Hive的表有两种基本类型
外部表:数据不属于Hive数据仓库,元数据中会表达具体数据在哪里,使用的时候和内部表的使用时一样的,只是通过Hive去删除的话,此时删除的是元数据,并没有删除数据本身
内部表:这种表数据属于Hive本身,原来的数据在HDFS的其他地方,此时数据会通过HDFS移动到Hive数据仓库所在的目录下,如果删除Hive中的该表的话,数据和元数据均会被删除。
说明:
Hive默认情况下,放元数据的是Derby,遗憾的是Derby是单用户的,在生产环境下一般采用支持多用户的数据库,来进行Meta Store,且进行Master-Slave主从读写分离和备份,最常用是MySQL
数据仓库,英文名称为Data Warehouse,可简写为DW或DWH。数据仓库,是为企业所有级别的决策制定过程,提供所有类型数据支持的战略集合。它是单个数据存储,出于分析性报告和决策支持目的而创建。 为需要业务智能的企业,提供指导业务流程改进、监视时间、成本、质量以及控制,简而言之,数据仓库是用来做查询分析的数据库,基本不用来做插入,修改,删除。
什么是Hive?
hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供简单的sql查询功能,可以将sql语句转换为MapReduce任务进行运行。 其优点是学习成本低,可以通过类SQL语句快速实现简单的MapReduce统计,不必开发专门的MapReduce应用,十分适合数据仓库的统计分析。
Hive:数据仓库。
Hive:解释器,编译器,优化器等。
Hive:运行时,元数据存放在关系型数据库里。
Hive的架构:
(1)用户接口主要有三个:CLI,Client 和WUI。其中最常用的是CLI,Cli启动的时候,会同时启动一个Hive副本。Client是Hive的客户端,用户连接至Hive Server。在启动Client模式的时候,需要指出Hive Server所在节点,并且在该节点启动Hive Server。WUI是通过浏览器访问Hive。
(2)Hive将元数据存储在数据库中,如MySQL、derby。Hive中的元数据包括表的名字,表的列和分区及其属性,表的属性(是否为外部表等),表的数据所在目录等。
(3)解释器、编译器、优化器完成HQL查询语句从词法分析、语法分析、编译、优化以及查询计划的生成。生成的查询计划存储在HDFS中,并在随后有MapReduce调用执行。
(4)Hive的数据存储在HDFS中,大部分的查询、计算由MapReduce完成(包含*的查询,比如select * from tbl不会生成MapRedcue任务)。
编译器将一个Hive QL转换操作符。
操作符是Hive的最小的处理单元。
每个操作符代表HDFS的一个操作或者一道MapReduce作业。
Operator
Operator都是hive定义的一个处理过程
Operator都定义有:
protectedList<Operator<?extendsSerializable>>childOperators;
protectedList<Operator<?extendsSerializable>>parentOperators;
protectedbooleandone;// 初始化值为false
ANTLR词法语法分析工具解析HQL
Hive的三种模式:
1.单用户模式。此模式连接到一个In-memory 的数据库Derby,一般用于Unit Test。
2.单用户模式。通过网络连接到一个数据库中,是最经常使用到的模式。
3.远程服务器模式。用于非Java客户端访问元数据库,在服务器端启动MetaStoreServer,客户端利用Thrift协议通过MetaStoreServer访问元数据库。