第 1 章 Hive 数据仓库

1.数据仓库基本概念

1.1什么是 Hive

1)hive 简介:

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

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

2)Hive 本质:

       将 HQL 转化成 MapReduce 程序

1.2Hive 的优缺点

1.2.1 优点

(1)操作接口采用类 SQL 语法,提供快速开发的能力(简单、容易上手)。

(2)避免了去写 MapReduce,减少开发人员的学习成本。

(3)Hive 的执行延迟比较高,因此 Hive 常用于数据分析,对实时性要求不高的场合。

      (4)Hive 优势在于处理大数据,对于处理小数据没有优势,因为 Hive 的执行延迟比较 高。

(5)Hive 支持用户自定义函数,用户可以根据自己的需求来实现自己的函数。

1.2.2 缺点
        1)Hive  HQL 表达能力有限

        (1)迭代式算法无法表达

              (2)数据挖掘方面不擅长,由于 MapReduce 数据处理流程的限制,效率更高的算法却 无法实现。

         2)Hive 的效率比较低

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

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

1.3hive架构图                

1)用户接口:Client

   CLI(command-line interface)、JDBC/ODBC(jdbc 访问 hive)、WEBUI(浏览器访问 hive)

2)元数据:Metastore

        元数据包括:表名、表所属的数据库(默认是 default)、表的拥有者、列/分区字段、 表的类型(是否是外部表)、表的数据所在目录等;

默认存储在自带的 derby 数据库中,推荐使用 MySQL 存储 Metastore

3Hadoop

使用 HDFS 进行存储,使用 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 和数据库除了拥有类似的查询语言,再无类似之处。 数据库可以用在 Online 的应用中,但是 Hive 是为数据仓库而设计的,清楚这一点,有助于从应用角度理解 Hive 的特性。

1.4.1 查询语言

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

      1.4.2 数据更新

             由于 Hive 是针对数据仓库应用设计的,而的内因此,Hive 有的候确而数据库中的数据通常是需 要经常进行修改的,因此可以使用 INSERT INTO … VALUES 添加数据,使用 UPDATE … SET 修 改数据。      

       1.4.3 执行延迟

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

        1.4.4 数据规模

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

1.5 数据仓库

        数据仓库是一个面向主题的、集成的、相对稳定的、反映历史文化变化的数据集合,用于支持管理决策。

1.6 数据仓库与数据区别

数据仓库是一种结构体系,而数据库是一种具体技术数据仓库是伴随着信息与决策支持系统的发展过程产生的

数据库 Database (Oracle, Mysql, PostgreSQL)主要用于事务处理,

数据仓库 Datawarehouse (Amazon Redshift, Hive)主要用于数据分析

用途上的不同决定了这两种架构的特点不同。

数据库(Database)的特点是:

  • 相对复杂的表格结构,存储结构相对紧致,少冗余数据。
  • 读和写都有优化。
  • 相对简单的read/write query,单次作用于相对的少量数据。

数据仓库(Datawarehouse)的特点是:

  • 相对简单的(Denormalized)表格结构,存储结构相对松散,多冗余数据。
  • 一般只是读优化。
  • 相对复杂的read query,单次作用于相对大量的数据(历史数据)。

数据仓库的所有的特性(独立不影响业务,表结构简单,读数据速度快,相对安全)

两者的对比

1、存储空间对比

从存储空间角度讲,相比于数据库紧密的存储结构,数据仓库则存在大量冗余重复的数据。

2、读写优化对比

由于数据库需要利用表之间的关联才能找到所有需要的数据,在效率上会相对低下。相比之下数据仓库把这些关联关系转化成重复数据记录到同一张表上了,查询效率相对就会较高。数据仓库相当于牺牲了空间换取了查询效率。

3、大数据读(Read)操作对比

数据仓库在查询的时候,不仅根据查询键的值来搜索对应节点位置,同时进行大量的并行查询。这使得在对大数据进行查询的时候有极大的优势。

但是,并不是所有的读操作,数据仓库一直都有优势。比如在如下两种情况时,数据仓库的读表现并不如数据库:

  1. 在对小量数据进行读取操作的时候,由于数据仓库要进行找Node的location之类的预运算,整体效率上反倒不如数据库。
  2. 如果读取操作的目标不是主键(PrimaryKey)或者分配键(PartitionKey),那么数据仓库的查询也需要进行全局扫描,效率上就不好说是否胜过数据库了。

1.7 Hive的工作流程

Hive工作流程中各步骤的详细描述

1.执行查询:hive接口(如命令行或UI)通过发送查询驱动程序执行查询

2.获取计划:在驱动程序帮助下查询编译器,并分析查询检查语法、查询计划及查询要求

3.获取元数据:编译器发送原数据请求至Metastore

4.发送元数据:Metastore发生元数据至编译器以响应之

5.发送计划:编译器检查查询要求,并重新发送查询计划至驱动程序;至此,查询解析与编译完成

6.执行计划:驱动程序发送执行计划至执行引擎

7.执行任务:执行任务的过程是完成一个MapReduce工作的过程。执行引擎发送作业至JobTracker,JobTracker再把作业分配TaskTracker;在TaskTrakcer中查询计划将执行MapReduce工作。同时,执行引擎可以通过Metastore执行元数据操作

8.获取结果:执行引擎接受来自数据节点的结果

9.发送结果:执行引擎发送结果只驱动程序

10.发送结果:驱动程序发送结果至Hive接口

1.8 Hive适用场景

1.适用场景
  • Hive适用于非结构化数据的离线分析统计场合
  • Hive的执行延迟比较高,因此适用与对实时性要求不高的场合
  • Hive的优势在于处理大数据,因此适用于大数据(而非小数据)处理的场合
2. 场景技术特点
  • 为超大数据集设计了计算与扩展功能
  • 支持SQL like查询语言
  • 支持多表的join操作
  • 支持非结构化数据的查询与计算
  • 提供了数据存取的编程接口,支持JDBC、ODBC

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值