Hive:由Facebook开源用于解决海量结构化日志的数据统计。算法
Hive是基于Hadoop的一个数据仓库工具,能够将结构化的数据(有规律的数据)文件映射为一张表,并提供类SQL查询功能。sql
一句话暴力总结:经过写SQL语句的方式,代替原来的写MapReduce程序。数据库
下边几点还须要留意一下:浏览器
Hive处理的数据存储在HDFS ;架构
Hive分析数据底层的实现是MapReduce ;框架
执行程序运行在Yarn上 ;分布式
这就至关于Hive是Hadoop的客户端,不是分布式的
函数
1)操做接口采用类SQL的语法,比较好上手,不用写代码;工具
2)避免写MapReduce程序代码,减小了开发人员的学习成本,也提升了开发效率嘛;oop
3)适用于数据分析,对实时性要求不高的场合,由于默认的实现是MapReduce;
4)Hive主要的优点在于处理大数据,对处理小数据没有优点,由于Hive的执行延迟比较高;
5)Hive支持用户自定函数,开发人员能够根据需求自定义函数。
1)Hive的HQL表达能力有限:
(1)迭代式算法没法表达;
(2)数据挖掘方面不擅长,因为MapReduce数据处理流程的限制,效率更高的算法却没法实现。
2)Hive的效率比较低:
(1)Hive自动生成的MapReduce做业,一般状况下不够智能化;
(2)Hive调优比较困难,粒度较粗。
Hive主要架构及协同工做的架构组件以下图:
了解一下各个组件:
1)用户接口:Client,不属于hive的内部数据
CLI(command-line interface)、JDBC/ODBC(jdbc访问hive)、WEBUI(浏览器访问hive)
2)元数据:Metastore
元数据包括:表名、表所属的数据库(默认是default库)、表的拥有者、列/分区字段、表的类型(是不是外部表)、表的数据所在目录等;
例如:HDFS上有一个文件,有四个列,咱们用Hive建了一个四个列的表与之相映射,这个映射关系就是元数据Metastore
元数据默认存储在自带的derby数据库中,推荐使用MySQL存储Metastore(Hive要去HDFS上读数据,它怎么知道数据的位置呢?它要先访问Mysql里的元数据,根据元数据拼接处文件路径)。
3)Hadoop
Hive处理的数据存储在HDFS上,使用的是MapReduce进行计算。
4)驱动器:Driver
(1)解析器:将SQL字符串转换成抽象语法树AST,这一步通常都用第三方工具库完成,好比antlr;对AST进行语法分析,好比表是否存在、字段是否存在、SQL语义是否有误;
(2)编译器:将AST编译生成逻辑执行计划;【即翻译器:将HQL翻译成MapReduce】
(3)优化器:对逻辑执行计划进行优化;
(4)执行器:把逻辑执行计划转换成能够运行的物理计划。对于Hive来讲,就是MR/Spark。
小总结:Hive经过给用户提供的一系列交互接口,接收到用户的指令(HQL),使用本身的Driver,结合元数据(包括数据的存储路径和数据与表的映射关系),将这些指令翻译成MapReduce,提交到Hadoop中执行,最后,将执行返回的结果输出到用户交互接口。
Hive 是为数据仓库而设计的 ,Hive 采用了相似SQL 的查询语言 HQL(Hive Query Language),所以很容易将 Hive 理解为数据库。其实从结构上来看,Hive 和数据库除了拥有相似的查询语言,再无相似之处。比较一下二者吧: