1、什么是Hive?---Hive是一个数据仓库,不是数据库
hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供简单的sql查询功能,可以将sql语句转换为MapReduce任务进行运行。 其优点是学习成本低,可以通过类SQL语句快速实现简单的MapReduce统计,不必开发专门的MapReduce应用,十分适合数据仓库的统计分析。
◆数据仓库和数据库的区别
简而言之,数据库是面向事务的设计,数据仓库是面向主题设计的;数据库一般存储在线交易数据,数据仓库存储的一般是历史数据;数据库设计是尽量避免冗余,一般采用符合范式的规则来设计,数据仓库在设计时有意引入冗余,采用反范式的方式来设计;数据库是为捕获数据而设计,数据仓库是为分析数据而设计。
Hive构建在基于静态批处理的Hadoop之上,Hadoop通常都有较高的延迟并且在作业提交和调度的时候需要大量的开销。因此,Hive并不能够在大规模数据集上实现低延迟快速的查询,例如,Hive在几百MB 的数据集上执行查询一般有分钟级的时间延迟。所以, Hive并不适合那些需要低延迟的应用,例如,联机事务处理(OLTP)。Hive查询操作过程严格遵守Hadoop MapReduce 的作业执行模型,Hive将用户的HiveQL 语句通过解释器转换为MapReduce作业提交到Hadoop集群上,Hadoop监控作业执行过程,然后返回作业执行结果给用户。Hive并非为联机事务处理而设计,Hive并不提供实时的查询和基于行级的数据更新操作。Hive的最佳使用场合是大数据集的批处理作业,例如,网络日志分析。
◆Hive与SQL的区别:
Hive是读时模式(不会在数据加载时进行验证,而是在查询的时候进行),SQL是写时模式(数据在写入数据库是对模式进行检查)。在创建表加载数据时,Hive会直接将相应文件导入,而SQL会将文件中的数据一条一条写入数据库。因此,在进行大数据的分析时,使用Hive效率更高。
HQL和MySQL的方言最接近,但是两者还是存在显著性差异的。Hive不支持行级插入操作、更新操作和删除操作,Hive也不支持事务。
2、Hive的体系结构
A、用户接口
用户接口主要有三个:CLI,JDBC/ODBC和 Web GUI。其中最常用的是 CLI,Cli 启动的时候,会同时启动一个 Hive 副本。JDBC/ODBC 是 Hive 的客户端,用户连接至 Hive Server,在1.x之后,Hive使用了HiveServer2。WUI 是通过浏览器访问 Hive。
B、数据存储