hive入门与概念介绍

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/axiaoboge/article/details/84232651

1.1 什么是Hive

Hive:由Facebook开源用于解决海量结构化日志的数据统计。

Hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据映射成类似sql中的一张表,并提供类似sql查询功能。

查询原理:就是将HQL转换成MapReduce

           1   Hive处理的数据存储在HDFS

           2   Hive分析数据底层的实现是MapReduce

           3   执行程序运行在Yarn上

1.2 Hive的优缺点

    1.2.1 优点

  1. 操作接口采用类似SQL语法,简单,容易上手,快速开发。
  2. 避免了去写MapReduce,减少开发人员的学习成本。
  3. Hive的执行延迟比较高,因此Hive常用于数据分析,对实时性要求不高的场合  
  4. Hive优势在于处理大数据,对于处理小数据没有优势,因为Hive的执行延迟比较高
  5. Hive支持用户自定义函数,用户可以根据自己的需求来实现自己的函数

    1.2.2 缺点

    1.Hive的HQL表达能力有限

(1)迭代式计算(spark 推荐)

(2)数据挖掘方面

    2.Hive的效率比较低

(1)Hive自动生成的MapReduce作业,通常情况下不够智能化

(2)Hive调优比较困难,粒度较粗

1.3 Hive架构原理

 

1.用户接口:Client

包括:CLI(hive shell)、     (hive的bin下)

JDBC/ODBC(java访问hive)、(java使用jdbc操作hive)

WEBUI(浏览器访问hive)

2.元数据:Metastore

元数据包括:表名、表所属的数据库(默认是default)、

表的拥有者、列/分区字段、表的类型(是否是外部表)、

表的数据所在目录等;

默认是储存hive自带的derby数据库,常用推荐使用mysql数据库

3.Hadoop

hive底层使用的是HDFS进行存储,将sql装换成转换成MapReduce进行计算。

4.驱动器:Driver

(1)解析器(SQL Parser):将SQL字符串转换成抽象语法树AST,这一步一般都用第三方工具库完成,比如antlr;对AST进行语法分析,比如表是否存在、字段是否存在、SQL语义是否有误。

(2)编译器(Physical Plan):将AST编译生成逻辑执行计划。

(3)优化器(Query Optimizer):对逻辑执行计划进行优化。

     (4)执行器(Execution):把逻辑执行计划转换成可以运行的物理计划。对于Hive来说,就是MR/Spark引擎。

1.4 Hive和数据库比较

由于 Hive 采用了类似SQL 的查询语言 HQL(Hive Query Language),因此很容易将 Hive 理解为数据库。其实从结构上来看,Hive 和数据库除了拥有类似的查询语言,再无类似之处。Hive 是为数据仓库而设计的,清楚这一点,有助于从应用角度理解 Hive 的特性。Hive设计的初衷就是在hdfs上使用类似sql的语法对海量的数据进行分析,memstore也是存在mysql上,Hive可以理解为只是对数据进行分析的执行引擎。

      1) 查询语言上:由于SQL被广泛的应用在数据仓库中针对Hive的特性设计了类SQL的查询语言HQL。基本上每个开发都会sql,

      2)Hive 是建立在 Hadoop 之上的,hive的所有数据都是存储在hdfs上的。而数据库则是把数据保存在本地文件系统上。

     3)数据更新上:Hive设计的初衷就是为了海量的数据分析,分析内容基本是读多写少,所以hive中不建议对数据的修改,所有的数据都是在load到hdfs中确定好的,而mysql则是根据业务需求经常修改的。

    4)Hive中大多数查询的执行是通过 Hadoop 提供的 MapReduce 来实现的,而数据库则有自己的执行引擎。

    5)执行延迟:Hive 在查询数据的时候,由于没有索引,需要扫描整个表,因此延迟较高。另外一个导致 Hive 执行延迟高的因素是 MapReduce框架。由于MapReduce 本身具有较高的延迟,因此在利用MapReduce 执行Hive查询时,也会有较高的延迟。相对的,数据库的执行延迟较低。当然,这个低是有条件的,即数据规模较小,当数据规模大到超过数据库的处理能力的时候,Hive的并行计算显然能体现出优势。

6)hive在扩展节点上和存储上,hadoop节点可以动态扩展,mysql却没有,mysql储存数据有上限,而hadoop却没有,天生为海量存储打下了基础。

 

 

 

猜你喜欢

转载自blog.csdn.net/axiaoboge/article/details/84232651