Hive开篇基本介绍

Hive是个啥玩意

  学习完 Hadoop 之后,在Hadoop阶段主要就是 MR的编写。但是写 MR 还是有点麻烦,会写很多无意义的代码,然而有意义的代码只有那么几行,就是map 和 reduce 中的一些业务,Driver中的代码贼无聊,也没有意义,此时Hive就出世了。如需学习 Hadoop 专栏,参考:Hadoop 教程目录

  Hive 将无聊的代码封装起来了,只需要我们为它提供一个 HQL语句,放到 hive 框架中执行,它就能够帮我们把 HQL 语句解析成对应的 MR 去执行,这样子就简单多了,省去了中间很多无意义的代码,甚是好用。

  所有的 HQL 都能够翻译成 MR 执行,但并不是所有的 MR 都能翻译成HQL(Hive能解决的问题,MR一定能解决,反之则不一定了)

1.Hive简介

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

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

   Hive 的本质,就是将 HQL 转化成 MapReduce 程序。(HQL = Hive SQL 或 HQL = Hive Query Language)

HQL→MapReduce解析过程,如图所示
在这里插入图片描述
①Hive 处理的数据存储在 HDFS
②Hive 分析数据底层的实现是 MapReduce
③执行程序运行在 Yarn 上

  Hive相当于 Hadoop 的一个客户端。为用户提供了一个入口,提交HQL,自动解析成MR去运行,只需要一个HQL即可。Hadoop、Zookeeper都有一个集群的概念。Hive是没有集群的,它只是一个客户端。

2.Hive优缺点

优点:

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

缺点:

  1. Hive 的 HQL 表达能力有限
    1.迭代式计算无法表达(迭代:第一个MR结果作为第二个MR输入,管道方式,HQL实现的话,需要使用多层嵌套方式)
    2.数据挖掘方面不擅长(由于 MapReduce 数据处理流程的限制,效率更高的算法却无法实现)
  2. 避免了去写 MapReduce,减少开发人员的学习成本
    1.Hive 自动生成的 MapReduce 作业,通常情况下不够智能化
    2.Hive 调优比较困难,粒度较粗(因为只能从SQL层调优,更多调优,还得依赖Hadoop调优)

3.Hive架构图

在这里插入图片描述

1.用户接口:Client
CLI(command-line interface命令行访问)、JDBC/ODBC(jdbc 访问 hive)、WEBUI(浏览器访问 hive)

2.元数据:Metastore
 元数据包括:表名、表所属的数据库(默认是 default)、表的拥有者、列/分区字段、表的类型(是否是外部表)、表的数据所在目录等内容;默认存储在自带的 Derby 数据库中,推荐使用 MySQL 存储 Metastore

3.Hadoop
 使用 HDFS 进行存储,使用 MapReduce 进行计算。

4.驱动器:Driver(这部分类似MySQL底层执行流程,参考:一条SQL语句的坎坷之旅(MySQL底层执行流程分析))
  解析器(SQL Parser):将 SQL 字符串转换成抽象语法树 AST,这一步一般都用第三方工具库完成,比如 antlr;对 AST 进行语法分析,比如表是否存在、字段是否存在、SQL语义是否有误。
  编译器(Physical Plan):将 AST 编译生成逻辑执行计划
  优化器(Query Optimizer):对逻辑执行计划进行优化。
  执行器(Execution):把逻辑执行计划转换成可以运行的物理计划。对于 Hive 来说,就是 MR/Spark。

4.Hive 运行机制

在这里插入图片描述
  Hive 通过给用户提供的一系列交互接口,接收到用户的指令(SQL),使用自己的 Driver,结合元数据(MetaStore),将这些指令翻译成 MapReduce,提交到 Hadoop 中执行,最后,将执行返回的结果输出到用户交互接口

5.Hive VS 数据库

  由于 Hive 采用了类似 SQL 的查询语言 HQL(Hive Query Language),因此很容易将 Hive 理解为数据库。其实从结构上来看,Hive 和数据库除了拥有类似的查询语言,再无类似之处。

  数据库可以用在 Online 的应用中,但是Hive 是为数据仓库而设计的,清楚这一点,有助于从应用角度理解 Hive 的特性。Hive 和 数据库还是有实质上的区别的。

1.查询语言
  由于 SQL 被广泛的应用在数据仓库中,因此,专门针对 Hive 的特性设计了类 SQL 的查询语言 HQL。熟悉 SQL 开发的开发者可以很方便的使用 Hive 进行开发

2.数据更新
  由于 Hive 是针对数据仓库应用设计的,而数据仓库的内容是读多写少的。因此,Hive 中不建议对数据的改写,所有的数据都是在加载的时候确定好的。而数据库中的数据通常是需要经常进行修改的,因此可以使用 INSERT INTO … VALUES 添加数据,使用 UPDATE … SET 修改数据。

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

4.数据规模
  由于 Hive 建立在集群上并可以利用 MapReduce 框架进行并行计算,因此可以支持很大规模的数据;对应的,数据库可以支持的数据规模相对较小。

下一篇:CentOS 7.7 安装 Hive 3.1.2

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

扛麻袋的少年

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值