第8章 数据仓库Hive

第8章 数据仓库Hive

8.1 概述

8.1.1 数据仓库概述

数据仓库(Data Warehouse)是一个面向主题的(Subject Oriented)、集成 的(Integrated)、相对稳定的(Non-Volatile)、反映历史变化(Time Variant )的数据集合,用于支持管理决策。

在这里插入图片描述

8.1.2 传统数据仓库面临的挑战

(1)无法满足快速增长的海量数据存储需求

(2)无法有效处理不同类型的数据

(3)计算和处理能力不足

8.1.3 Hive简介

•Hive是一个构建于Hadoop顶层的数据仓库工具

•支持大规模数据存储、分析,具有良好的可扩展性

•某种程度上可以看作是用户编程接口,本身不存储和处理数据

•依赖分布式文件系统HDFS存储数据

•依赖分布式并行计算模型MapReduce处理数据

•定义了简单的类似SQL 的查询语言——HiveQL

•用户可以通过编写的HiveQL语句运行MapReduce任务

•可以很容易把原来构建在关系数据库上的数据仓库应用程序移植到Hadoop平台上

•是一个可以提供有效、合理、直观组织和使用数据的分析工具

Hive具有的特点非常适用于数据仓库

•采用批处理方式处理海量数据

​ •Hive需要把HiveQL语句转换成MapReduce任务进行运行

​ •数据仓库存储的是静态数据,对静态数据的分析适合采用批处理方式,不需要快速响应给出结果,而且数据本身也不会频繁变化

•提供适合数据仓库操作的工具

​ •Hive本身提供了一系列对数据进行提取、转换、加载(ETL)的 工具,可以存储、查询和分析存储在Hadoop中的大规模数据

​ •这些工具能够很好地满足数据仓库各种应用场景

8.1.4 Hive与Hadoop生态系统中其他组件的关系

在这里插入图片描述

•Hive依赖于HDFS存储数据

•Hive依赖于MapReduce 处理数据

•在某些场景下Pig可以作为Hive的替代工具

•HBase 提供数据的实时访问

8.1.5 Hive与传统数据库的对比分析

Hive在很多方面和传统的关系数据库类似,但是它的底层依赖的是 HDFS和MapReduce,所以在很多方面又有别于传统数据库
在这里插入图片描述

8.1.6 Hive在企业大数据分析平台中的应用

在这里插入图片描述

8.2 Hive系统架构

在这里插入图片描述

用户接口模块 :CLI、 HWI、JDBC、ODBC、 Thrift Server

驱动模块(Driver) 包括编译器、优化器、执行器等, 负责把HiveSQL语句转换成一系列MapReduce作业

元数据存储模块( Metastore) 是一个独立的关系型数据库(自带derby数据库,或MySQL数据库)


8.3 Hive工作原理

8.3.1 SQL语句转化成MapReduce作业的基本原理

在这里插入图片描述


在这里插入图片描述

8.3.2 Hive中SQL查询转换成MapReduce作业的过程

•当用户向Hive输入一段命令或查询时,Hive需要与Hadoop交互工作来完成该操作:

​ 1.驱动模块接收该命令或查询编译器

​ 2.对该命令或查询进行解析编译

​ 3.由优化器对该命令或查询进行优化计算

​ 4.该命令或查询通过执行器进行执行

在这里插入图片描述

第1步:由Hive驱动模块中的编译器对用户输入 的SQL语言进行词法和语法解析,将SQL语句转 化为抽象语法树的形式

第2步:抽象语法树的结构仍很复杂,不方便直 接翻译为MapReduce算法程序,因此,把抽象 语法书转化为查询块

第3步:把查询块转换成逻辑查询计划,里面包含了许多逻辑操作符

第4步:重写逻辑查询计划,进行优化,合并多余操作,减少MapReduce任务数量

第5步:将逻辑操作符转换成需要执行的具体MapReduce任务

第6步:对生成的MapReduce任务进行优化,生成最终的MapReduce任务执行计划

第7步:由Hive驱动模块中的执行器,对最终的MapReduce任务进行执行输出

几点说明

1.当启动MapReduce程序时,Hive本身是不会生成MapReduce算法程序的,需要通过一个表示“Job执行计划”的XML文件驱动执行内置的、原生的Mapper和Reducer模块

2.Hive通过和JobTracker通信来初始化MapReduce任务,不必直接部署在 JobTracker所在的管理节点上执行

3.通常在大型集群上,会有专门的网关机来部署Hive工具。网关机的作用 主要是远程操作和管理节点上的JobTracker通信来执行任务

4.数据文件通常存储在HDFS上,HDFS由名称节点管理

8.4 Hive HA

Hive HA(High Availability) 用来解决Hive不稳定的问题。

原理

•由多个Hive实例进行管理的,这些Hive实例被纳入到一个资源池中,并由 HAProxy提供一个统一的对外接口

•对于程序开发人员来说,可以把它认为是一台超强“Hive"

在这里插入图片描述

8.5 Impala

8.5.1 Impala简介

• Impala是由Cloudera公司开发的新型查询系统,它提供SQL语义,能查询存储在Hadoop 的HDFS和HBase上的PB级大数据,在性能上比Hive高出3~30倍

• Impala的运行需要依赖于Hive的元数据

• Impala是参照 Dremel系统进行设计的

• Impala采用了与商用并行关系数据库类似的分布式查询引擎,可以直接与HDFS和HBase进行交互查询

• Impala和Hive采用相同的SQL语法、ODBC驱动程序和用户接口

8.5.2 Impala系统架构

Impala和Hive、HDFS、HBase等工具是统一部署在一个Hadoop平台上的 Impala主要由Impalad,State Store和CLI三部分组成

在这里插入图片描述

1.Impalad: 负责协调客户端提交的查询的执行

​ • 包含Query Planner、Query Coordinator和Query Exec Engine三个模块

​ • 与HDFS的数据节点(HDFS DN)运行在同一节点上

​ • 给其他Impalad分配任务以及收集其他Impalad的执行结果进行汇总

​ • Impalad也会执行其他Impalad给其分配的任务,主要就是对本地HDFS和HBase里的部分数据进行操作

2.State Store: 会创建一个statestored进程 ,负责收集分布在集群中各个Impalad进程的资源信息,用于查询调度

3.CLI: 给用户提供查询使用的命令行工具 • 还提供了Hue、JDBC及ODBC的使用接口

说明:Impala中的元数据直接存储在Hive中。Impala采用与Hive相同的元数据、SQL语法、ODBC驱动 程序和用户接口,从而使得在一个Hadoop平台上,可以统一部署Hive和Impala等分析工具,同时支持批处理和实时查询


8.5.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.5.4 Impala 和 Hive 的比较

在这里插入图片描述

Hive与Impala的相同点总结如下:

  1. Hive与Impala使用相同的存储数据池 , 都支持把数据存储于HDFS和HBase中
  2. Hive与Impala使用相同的元数据
  3. Hive与Impala中对SQL的解释处理比较相似,都是通过词法分析生成执行计划

总结

•Impala的目的不在于替换现有的MapReduce工具

•把Hive与Impala配合使用效果最佳

•可以先使用Hive进行数据转换处理,之后再使用Impala在Hive处理后的结果数据集上进行快速的数据分析

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值