大数据技术原理与应用——数据仓库
8.1 数据仓库的概念
根本目的
数据仓库概念
数据仓库是一个面向主题的、集成的、相对稳定的、反映历史变化的数据集合,用于支持管理决策。
数据仓库的数据都来自于数据源,数据源中的数据需要经过抽取、转换、加载这样一个过程,把它加载到数据仓库,这个抽取、转换、加载这个过程一般简称为 ETL,加载到数据仓库以后,可以通过里面的 OLAP 服务器和数据挖掘引擎对上层用户提供服务构建一个基础,就可以对外提供数据挖掘、报表、分析、查询等等应用。
数据仓库基本上保留了你历史上所有数据的状态。保留大量历史数据可以帮助企业构建经营分析系统,通过大量历史数据,就可以进行 OLAP 分析,找出企业经营管理中一些事物的规律。
传统数据仓库面临的挑战
1.无法满足快速增长的海量数据存储需求。
2.无法有效处理不同类型的数据。(传统数据库是基于关系型数据库构建的,只能支持结构化数据存储,没有办法去存储很多类型的非结构化数据)
3.计算和处理能力不足。(关系型数据库纵向扩展能力有限,水平扩展能力基本没有,没有办法通过增加节点方式,增加它的处理能力,纵向扩展加CPU、加内存,扩展空间也是有限的)
8.2 Hive 简介
在大数据时代,有Hadoop这一平台以后,实际上,基于Hadoop平台上构建的数据仓库产品很自然地就会填补市场的空白,就用来满足企业的大数据存储和数据仓库分析的需求,才有了Hive,Hive就是构建在Hadoop整个平台之上顶层的数据仓库工具,而且它支持大规模的数据存储分析,因为它是构建在Hadoop平台之上的,Hadoop本身是大数据处理架构、分布式处理架构,它具有非常好的水平可扩展性,所有构建在它之上的Hive也具有非常好的水平可扩展性,虽然Hive是一个数据仓库工具,它和传统的数据仓库也不一样。
Hadoop 本身就有支持大规模数据存储的组件 HDFS,支持大规模数据处理的组件叫 MapReduce,Hive就借助这两个组件完成数据的存储和处理。
- 依赖分布式文件系统 HDFS 存储数据
- 依赖分布式并行计算模型 MapReduce 处理数据
- 借鉴SQL语言设计了新的查询语言 HiveQL
Hive 两个方面的特性
(1)采用批处理方式处理海量数据
- Hive 会把 HiveQL 语句转换成 MapReduce 任务进行运行
- 数据仓库存储的是静态数据对静态数据的分析适合采用批处理方式,不需要快速响应给出结果,而且数据本身也不会频繁变化
(2)Hive 提供了一系列对数据进行提取、转换、加载(ETL)的工具
- 可以存储、查询和分析存储在 Hadoop 中的大规模数据
- 这些工具能够很好地满足数据仓库各种应用场景
Pig 和 Hive 应用场景的区别
Pig 主要用于数据仓库的 ETL 环节
Hive 主要用于数据仓库海量数据的批处理分析
Hive 和传统数据库
Hive 在很多方面和传统的关系数据库类似,但是它的底层依赖的是 HDFS 和 MapReduce,所以在很多方面又有别于传统数据库。
Hive 在企业大数据分析平台中的应用
Hive 在 Facebook 公司的应用
Hive 对外访问接口
CLI:一种命令行工具
HWI:Hive Web Interface 是 Hive 的 Web 接口
JDBC 和 ODBC:开放数据库连接接口很多应用开发都支持
Thrift Server:基于 Thrift 架构开发的接口,允许外界通过这个接口,实现对 Hive 仓库的 RPC 调用
驱动模块(Driver)
包含编译器、优化器、执行器
负责把 HiveQL 语句转换成一系列 MapReduce 作业
元数据存储模块(Metastore)
是一个独立的关系型数据库
通过 MySQL 数据库来存储 Hive 元数据
- Qubole
Hive HA 基本原理
8.3 SQL 转换成 MapReduce 作业的原理
Hive 本身不做具体的数据处理和存储
Hive 把 SQL 语句转换成相关的 MapReduce 作业
两个步骤
1.SQL 语句转换成 MapReduce 作业的基本原理
2.Hive 中 SQL 查询转换成 MapReduce 作业的过程
连接:怎么能够用 MapReduce 来实现数据库的连接操作
(1).编写一个 Map 处理逻辑
(2).Map 处理逻辑输入关系数据库的表
(3).通过 Map 对它进行转换
- join 的实现原理
- group by 的实现原理
当用户向 Hive 输入一段命令或查询时,Hive 需要与 Hadoop 交互工作来完成该操作
1.驱动模块接收该命令或查询编译器
2.对该命令或查询进行解析编译
3.由优化器对该命令或查询进行优化计算
4.该命令或查询通过执行器进行执行
(1)由 Hive 驱动模块中的编译器对用户输入的 SQL 语言进行词法和语法解析,将 SQL 语句转化为抽象语法树的形式。
(2)抽象语法树的结构仍很复杂,不方便直接翻译为 MapReduce 算法程序,因此,需要把抽象语法树转化为查询块。
(3)把查询块转换成逻辑查询计划,里面包含了许多逻辑操作符.
(4)重写逻辑查询计划,进行优化合并多余操作,减少 MapReduce 任务数量。
(5)将逻辑操作符转换成需要执行的具体 MapReduce 任务。
(6)对生成的 MapReduce 任务进行优化生成最终的 MapReduce 任务执行计划。
(7)由 Hive 驱动模块中的执行器对最终的 MapReduce 任务进行输出。
8.4.1 Impala 简介
1.Hive 是建立在 Hadoop 平台上。
2. Hive 依赖底层的 MapReduce 和 HDFS,所以它延迟比较高。
8.4.2 Impala 系统架构
Impala、Hive、HDFS、HBase 都是统一部署在一个 Hadoop 平台上面。
Impala最典型的三个组件:
(1)Impalad:负责具体的相关查询任务
(2)State Store:负责元数据管理和状态信息维护
(3)CLI:用户访问接口
Impalad
是驻留在各个不同的数据节点上面的相关的进程,它包含了三个模块,分别是:
(1)Query Planner(查询计划器)
(2)Query Coordinator(查询协调器)
(3)Query Exec Engine(查询执行引擎)
它的任务就是负责协调客户端提交的查询的执行,与 HDFS 的数据节点(HDFS DN)运行在同一节点上,它要做的事情是给其他 Impalad 分配任务以及收集其他 Impalad 的执行结果进行汇总,Impalad 也会执行其他 Impalad 给其分配的任务对本地 HDFS 和 HBase 里的部分数据进行操作。
State Store
(1)会创建一个 statestored 进程
(2)负责收集分布在集群中各个 Impalad 进程的资源信息用于查询调度
CLI
(1)给用户提供查询使用的命令行工具
(2)同时提供了 Hue、JDBC 及 ODBC 的使用接口
8.4.3 Impala 查询执行过程
(0)当用户提交查询时,Impala 先创建一个负责协调客户端提交的查询的 Impalad 进程,该进程会向 Impala State Store 提交注册订阅信息,State Store 会创建一个 statestored 程,statestored 进程通过创建多个线程来处理 Impalad 的注册订阅信息。
(1)用户通过 CLI 客户端提交一个查询到 impalad 进程,Impalad 的 Query Planner 对 SQL 语句进行解析,生成解析树,Planner 把这个查询的解析树变成若干 PlanFragment ,发送到 Query Coordinator。
(2)Coordinator 通过从 MySQL 元数据库中获取元数据,从 HDFS 的名称节点中获取数据地址,以得到存储这个查询相关数据的所有数据节点。
(3)Coordinator 初始化相应 impalad 上的任务执行,即把查询任务分配给所有存储这个查询相关数据的数据节点。
(4)Query Executor 通过流式交换中间输出,并由 Query Coordinator 汇聚来自各个 impalad 的结果
(5)Coordinator 把汇总后的结果返回给 CLI 客户端
8.4.4 Impala 与 Hive 的比较
Hive 与 Impala 的不同点
1.Hive 适合于长时间的批处理查询分析,而 Impala 适合于实时交互式 SQL 查询。
2.Hive 依赖于 MapReduce 计算框架,Impala 把执行计划表现为一棵完整的执行计划,直接分发执行计划到各个 Impalad 执行查询。
3.Hive 在执行过程中,如果内存放不下所有数据则会使用外存,以保证查询能顺序执行完成。Impala 在遇到内存放不下数据时,不会利用外存所以 Impala 目前处理查询时会受到一定的限制。
Hive 与 Impala 的相同点
1.Hive 与 Impala 使用相同的存储数据池,都支持把数据存储于 HDFS 和 HBase 中。
2.Hive 与 Impala 使用相同的元数据。
3.Hive 与 Impala 中对 SQL 的解释处理比较相似都是通过词法分析生成执行计划。
8.5.1 Hive 安装与基本操作
Hive 的数据类型
8.5.2 Hive 应用实例 WordCount
具体步骤
进入 hive 命令行界面,编写 HiveQL 语句实现 WordCount 算法