分享

《hive编程指南》——初始hive

本帖最后由 BGnv5 于 2019-9-21 15:16 编辑
问题导读:

1.什么是hive?
2.Hive在什么情况下产生的,我们为什么需要使用它?
3.hive有哪些优缺点?
4.hive的组成模块有哪些?
5.MapReduce基本原理是怎样的?

预备知识

基本概念

为了更好的理解hive我必须在这里介绍以下几个基本概念:

数据仓库:一个面向主题的、集成的、相对稳定的、反映历史变化的数据集合。

Hadoop:一个开源的、分布式存储和分布式计算平台,用来处理大数据集。它提供了一套技术设施来处理大多数困难的工作来保证任务能够执行成功。例如,Hadoop 决定如果将提交的 job 分解成多个独立的 map 和reduce 任务(task)来执行,它就会对这些 task 进行调度并为其分配合适的资源,决定将某个 task 分配到集群中哪个位置(通常是这个 task 所要处理的数据所在的位置,这样可以最小化网络开销)。它会监控每一个 task 以确保成功完成,并重启一些失败的 task。

MapReduce:Hadoop 实现的一个特殊的计算模型,可以将计算任务分割成多个处理单元,然后分散到一群家用或者服务器级别的硬件机器上,从而降低成本并提供水平可伸缩性。

HDFS:Hadoop 分布式文件系统(也就是 HDFS)。负责各个节点的数据存储,管理着集群中的数据,每个数据块(block)都会被冗余多份(默认3份),这样可以保证数据的高可用,同时因为处理非常大的数据集,所以 HDFS 的数据块都非常大(64MB或者整数倍),这样可以使数据在磁盘上连续存储,保证以最少的磁盘寻址次数进行读写,从而实现了高吞吐率的数据读写。

Pig :一种数据流语言,而不是一种查询语言。在 Pig 中,用户需要写一系列的声明语句来定义某些关系和其他一些关系之间的联系,这里的新关系都会执行新的数据转换过程。Pig 会查找这些声明,然后创建一系列有次序的 MapReduce 任务,来对数据进行转换,知道产生符合预期的计算方式所得到的最终结果。当你想在你的数据上做一些转换,并且不想编写MapReduce jobs就可以用Pig.

HBase :一个分布式的,可伸缩的数据存储(但不支持多行事务)。提供了 Hive 不支持的数据库特性(行级别的更新,快速的查询响应时间,以及支持事务)。它 支持的一个重要特性就是列存储,列可以组织成列族,列族在分布式集群中物理上是存储在一起的。这样使得查询只是所有列的子集时,读写速度会快很多(因为只用读取需要的列)。它可以像键值存储一样被使用,每一行都是用一个唯一键来提供非常快的速度读写这一行的列或者列族,同时它 会对每个列保留多个版本的值以供回滚。它使用 分布式文件系统(通常是HDFS)来持久化存储数据,为了优化数据的更新和查询性能,HBase 也使用内存缓存技术对数据和本地文件进行追加数据更新操作日志。通过日志定期更新持久化文件。

MapReduce工作原理

理解 MapReduce的基础原理将有助于了解 Hive 底层是如何运作的,以及了解如何才能更高效的使用 Hive。

MapReduce是Hadoop解决大规模数据布式计算的方案,可以解决几乎所有大数据领域内的计算需求。它包含两个基本的数据转换操作:map过程 和 reduce过程。

map 主要以键值对的形式进行输入,经过 map 计算后输入的键值对会被转换成零到多个键值对输出。其中,输入和输出的键必须完全不同,而输入和输出的值则可能完全不同。然后将相同的键合并,形成新的<key,value集合>作为 reduce 操作的输入,reduce 过程的目的是将值的集合转换成一个值(例如对一组数组求和或求平均值),或者转换成另一个集合。Reducer过后 最终会产生一个键值对。

说了这么多可能大家还不怎么理解,下面我来举个词频统计的例子说明一下

1.gif

假如我现在有文本:
    a.gif
首先构建输入的键值对,一行数据做为一个value,key在计算过程中不需要使用,将value映射为<单词,1>的形式:
    b.gif
经过map计算后得到:
    c.gif
接下来合并相同key的键值对,得到:
d.gif
将这个结果交给Reduce操作,得到:
      e.gif
经过这么几个步骤,MapReduce就帮我们计算好了我们输入文本的词频结果。

Hive产生原因

看到这里大家是不是觉得好复杂啊,实际上MapReduce实现复杂查询逻辑开发难度更大,而且对于大量的SQL用户来说怎样从一个现有的基于传统关系型数据库和结构化查询语句(SQL)的基础架构转移到Hadoop上,也是一个非常大的挑战。而 Hive的出现就是为了解决这些问题的。

什么是hive?

说了这么多,那么到底什么是hive呢?

Hive 是基于 Hadoop 的一个数据仓库工具——一款基于 HDFS的 MapReduce 计算框架,对存储在 HDFS 中的数据进行分析和管理。

它提供了一个被称为hive查询语言(简称HiveQL或HQL)的SQL 方言,用以查询存储在 Hadoop 集群种的数据,并能将它转换为 MapReduce 任务运行

它可以将结构化的数据映射为一张数据库表

使不熟悉 MapReduce 的用户很方便地利用 HQL 处理和计算 HDFS 上的结构化的数据,适用于离线的批量数据计算。

下面我们再来看看hive都由哪几部分组成的?


Hive架构

2.gif

用户接口

Hive发行版中附带的模块有 CLI,一个称为 HWI 的网页界面,以及可通过 JDBC、ODBC进行便横访问的几个模块来实现与 Hive 进行交互。

Thrift(跨语言服务)

Thrift : Facebook 开发的一个软件框架,可以用来进行可扩展且跨语言的服务的开发, Hive 集成了该服务,能让不同的编程语言调用 Hive 的接口。

Driver(驱动模块)

所有的命令和查询都会进入到 Driver(驱动模块),通过该模块完成 HQL 查询语句从词法分析,语法分析,编译,优化,以及生成逻辑执行计划的生成。

Hive 的核心是驱动引擎, 驱动引擎由四部分组成:
(1) 解释器:解释器的作用是将 HiveSQL 语句转换为抽象语法树(AST)
(2) 编译器(Compilers):编译器是将语法树编译为逻辑执行计划
(3) 优化器(optimizes):优化器是对逻辑执行计划进行优化
(4) 执行器(executes):执行器是调用底层的运行框架执行逻辑执行计划

生成的逻辑执行计划存储在 HDFS 中,并随后由 MapReduce 调用执行。当需要启动 MapReduce 任务时, Hive 本身是不会生成 Java MapReduce 算法程序的。相反, Hive 通过一个表示 ”job 执行计划“ 的 XML 文件驱动执行内置的原生的 Mapper 和 Reducer 模块。

Hive 通过和 JobTracker 通信来初始化 MapReduce 任务,而不必部署在 JobTracker所在的管理节点上执行。通常要处理的数据文件是存储在 HDFS 中的,而 HDFS 和由 NameNode 进行管理的。

Metastore(元数据存储)

元数据,通俗的讲,就是存储在 Hive 中的数据的描述信息。

Hive 和 MySQL 之间通过 MetaStore 服务交互,它是一个独立的关系型数据库(通常是一个 MySQL 实例),Hive 会在其中保存表模式和其他系统元数据。

Hive 中的元数据通常包括:表的名字,表的列和分区及其属性,表的属性(内部表和 外部表),表的数据所在目录

执行流程

HiveQL 通过命令行或者客户端提交,经过 Compilers编译器,运用 MetaStore 中的元数据进行类型检测和语法分析,生成一个逻辑方案(Logical Plan),然后通过的优化处理,产生 一个 MapReduce 任务。

3.gif

hive优缺点

优点   


  • 简单容易上手,提供了类SQL查询语言HQL可扩展性,为超大数据集设计了计算/扩展能力(MR作为计算引擎,HDFS作为存储系统),一般情况下不需要重启服务Hive可以自由的扩展集群的规模。
  • 提供统一的元数据管理
  • 延展性,Hive 支持自定义函数,用户可以根据自己的需求来实现自己的函数
  • 良好的容错性,可以保障即使有节点出现问题,SQL 语句仍可完成执行

缺点

  • Hive 不是一个完整的数据库。Hadoop 以及 HDFS 的设计本身约束和局限性地限制了 Hive 所能胜任的工作。
  • 最大的限制就是 Hive 不支持记录级别的更新、插入或者删除操作。但是用户可以通过查询生成新表或者将查询结果导入到文件中;
  • Hive 查询延时比较严重,因为 Hadoop 是一个面向批处理的系统,而 MapReduce 任务的启动过程需要消耗较长的时间,所以 Hive 查询延时比较严重。传统数据库中在秒级别可以完成的查询,在 Hive 中,即使数据集相对较小,往往也需要执行更长的时间;
  • Hive 不支持事务,因此,Hive 不支持 OLTP(联机事务处理)所需的关键功能,而更接近成为一个 OLAP(联机分析技术)工具。但因为延时较大,所以 Hive 并没有满足 OLAP 中的“联机”部分。

因此 Hive 是最适合数据仓库应用程序的,其可以维护海量数据,而且可以对数据进行挖掘,然后形成意见和报告等。相对其他 Hadoop 语言和工具来说,Hive 似的开发者将基于 SQL 的应用程序一直到 Hadoop 变得更加容易。

看到这里,我们对hive也有了一些初步的了解,下一篇文章我会带大家从0开始安装和配置hive,并一步步走进hive的世界





最新经典文章,欢迎关注公众号



作者:BGnv5
微信:wxid_65y5afmrqjmv22



本帖被以下淘专辑推荐:

已有(1)人评论

跳转到指定楼层
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

推荐上一条 /2 下一条