仓库处理中 无法修改_浅谈数据仓库----Hive

首先我们得明白什么是数据仓库?

  数据仓库,英文名称为Data warehouse,可简写为DW或DWH。数据仓库的目的是构建面向分析的集成化数据环境,为企业提供决策支持(Decision Support)。它出于分析性报告和决策支持目的而创建。

  数据仓库本身并不“生产”任何数据,同时自身也不需要“消费”任何的数据,数据来源于外部,并且开放给外部应用,这也是为什么叫“仓库”,而不叫“工厂”的原因。

数据仓库的主要特征:数据仓库是 面向主题的(Subject-Oriented )、 集成的(Integrated)、非易失的(Non-Volatile)和 时变的(Time-Variant )数据集合,用以支持管理决策。

数据仓库与数据库的区别:数据库与数据仓库的区别实际讲的是 OLTP 与 OLAP 的区别。

  操作型处理,叫联机事务处理 OLTP(On-Line Transaction Processing),也可以称面向交易的处理系统,它是针对具体业务在数据库联机的日常操作,通常对少数记录进行查询、修改。用户较为关心操作的响应时间、数据的安全性、完整性和并发支持的用户数等问题。传统的数据库系统作为数据管理的主要手段,主要用于操作型处理。

  分析型处理,叫联机分析处理 OLAP(On-Line Analytical Processing)一般针对某些主题的历史数据进行分析,支持管理决策。


首先我们要明白,数据仓库的出现,并不是要取代数据库。概况起来,可以从以下几个方面去看待数据仓库跟数据库的区别:

  1. 面向对象:数据库是面向事务的设计,数据仓库是面向主题设计的。
  2. 实时性:数据库及时返回对应结果,数据仓库Hive需要执行mapreduce程序
  3. 数据规模:数据库存储的数据量级小,Hive存储面对大规模数据集。数据设计是尽量避免冗余,一般针对某一业务应用进行设计,比如一张简单的 User 表,记录用户名、密码等简单数据即可,符合业务应用,但是不符合分析。数据仓库在设计是有意引入冗余,依照分析需求,分析维度、分析指标进行设计。
  4. 历史数据:mysql等数据库修改数据是永久修改无法获取各个历史状态。hive可以创建时间拉链表,可以保留各个时刻的数据。

a5ddb2003b2ceccceb4cf89ca1e8ec71.png

数据仓库的数据来源于不同的源数据,并提供多样的数据应用,数据自下而上流入数据仓库后向上层开放应用,而数据仓库只是中间集成化数据管理的一个平台。

源数据层(ODS):此层数据无任何更改,直接沿用外围系统数据结构和数据,不对外开放;为临时存储层,是接口数据的临时存储区域,为后一步的数据处理做准备。

细节层(DW):为数据仓库层,DW 层的数据应该是一致的、准确的、干净的数据,即对源系统数据进行了清洗(去除了杂质)后的数据。

应用层(DA 或 APP):前端应用直接读取的数据源;根据报表、专题分析需求而计算生成的数据。

数据仓库从各数据源获取数据及在数据仓库内的数据转换和流动都可以认为是 ETL(抽取 Extra, 转化 Transfer, 装载 Load) 的过程,ETL 是数据仓库的流水线,也可以认为是数据仓库的血液,它维系着数据仓库中数据的新陈代谢,而数据仓库日常的管理和维护工作的大部分精力就是保持 ETL 的正常和稳定。

为什么要对数据仓库分层?

  用空间换时间,通过大量的预处理来提升应用系统的用户体验(效率),因此数据仓库会存在大量冗余的数据;不分层的话,如果源业务系统的业务规则发生变化将会影响整个数据清洗过程,工作量巨大。

  通过数据分层管理可以简化数据清洗的过程,因为把原来一步的工作分到了多个步骤去完成,相当于把一个复杂的工作拆成了多个简单的工作,把一个大的黑盒变成了一个白盒,每一层的处理逻辑都相对简单和容易理解,这样我们比较容易保证每一个步骤的正确性,当数据发生错误的时候,往往我们只需要局部调整某个步骤即可。

数据仓库元数据管理

  元数据(Meta Date),其实应该叫做解释性数据,或者数据字典,即数据的数据。主要记录数据仓库中模型的定义、各层级间的映射关系、监控数据仓库的数据状态及 ETL 的任务运行状态。一般会通过元数据资料库(MetadataRepository)来统一地存储和管理元数据,其主要目的是使数据仓库的设计、部署、操作和管理能达成协同和一致。

  元数据是数据仓库管理系统的重要组成部分,元数据管理是企业级数据仓库中的关键组件,贯穿数据仓库构建的整个过程,直接影响着数据仓库的构建、使用和维护。

注:

  1. 构建数据仓库的主要步骤之一是 ETL。这时元数据将发挥重要的作用,它定义了源数据系统到数据仓库的映射、数据转换的规则、数据仓库的逻辑结构、数据更新的规则、数据导入历史记录以及装载周期等相关内容。数据抽取和转换的专家以及数据仓库管理员正是通过元数据高效地构建数据仓库。
  2. 用户在使用数据仓库时,通过元数据访问数据,明确数据项的含义以及定制报表。
  3. 数据仓库的规模及其复杂性离不开正确的元数据管理,包括增加或移除外部数据源,改变数据清洗方法,控制出错的查询以及安排备份等。

ee614d8a12e83f7397cd8babec83de02.png

由上可见,元数据不仅定义了数据仓库中数据的模式、来源、抽取和转换规则等,而且是整个数据仓库系统运行的基础,元数据把数据仓库系统中各个松散的组件联系起来,组成了一个有机的整体。


那什么是Hive呢?

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

hive的主要用途:用来做离线数据分析,比直接用MapReduce程序开发效率更高。

直接使用MapReduce所面临的问题:

  1. 人员学习成本太高
  2. 项目周期要求太短
  3. MapReduce 实现复杂查询逻辑开发难度太大

为什么使用hive:

  1. 操作接口采用类 SQL 语法,提供快速开发的能力。
  2. 避免了去写 MapReduce,减少开发人员的学习成本。
  3. 功能扩展很方便。

Hive基本组件及功能:

用户接口:cli :命令行

jdbc:通过thrift协议连接到指定的hive的服务端口10000

Web GUI:2.X版本已淘汰。

Driver:接收用户查询,并且实现了会话处理,基于JDBC/ODBC实现了执行、拉取数据等API

包括:解析器、编译器、优化器、执行器

Complier:解析查询语句,做语义分析,最终借助在Metastore中查询到的表和分区的元数据生成执行计划(execution plan),这个和传统的RDBMS比较相似,其实Hive也有优化器(Optimizer),图中没有画出来。

Metastore:存储表和分区的元数据信息,包括字段、字段类型、读写数据需要的序列化和反序列化信息。想要访问hive的数据,必须要经过元数据。metastore可以给其他服务或者组件提供对hive的访问。

Execution Engine:执行引擎,用来执行Complier生成的执行计划,是Hive和Hadoop之间的桥梁,现在Hive支持的计算引擎包括MR(逐渐废弃)、Tez、Spark。

HiverServer2:可以接受多个客户端的并发访问,默认端口是10000.最早提供该功能的是HiveServer,因为缺乏并发支持和认证机制,在Hive 1.0.0版本中被移除,引入了HS2。HS2解决了HS1缺乏的并发和认证功能。

Beeline:配合hiveserver2的客户端,更加安全并且不会直接暴露hdfs和metastore。

如下图所示:HS2也是Hive的一个模块,和Hive的Driver、Complier、Execution Engine模块一样。

23b3848610ffb97f468d93d8df5a9137.png

MetaStore是Hive必不可少的一个模块,它提供了两个非常重要的功能:数据抽象和数据发现

数据抽象:就是使用Hive处理数据之前,要先定义库、表、分区、序列化、反序列化等信息。这些信息都会作为元数据存储在MetaStore中,后面操作表里面的数据时直接去MetaStore里面就可以获取到数据的这些元信息。而不用每次操作数据的时候,再去看看数据格式是什么样子,如何读取,如何加载的等。

数据发现:一方面用户可以通过元数据去了解数据,另一方面其他的一些系统也可以基于Hive的研数据做一些功能。

MetaStore的三种E/R图如下所示:

894283e30d47d73e6d89ca9d217a2914.png

对于数据存储,Hive没有专门的数据存储格式,也没有为数据建立索引,用户可以非常自由的组织Hive中的表,只需要在创建表的时候告诉Hive数据中的列分隔符和行分隔符,Hive就可以解析数据。Hive中所有的数据都存储在HDFS中,存储结构主要包括数据库、文件、表和视图。

Hive 与 Hadoop 的关系

Hive 利用 HDFS存储数据,利用 MapReduce 查询分析数据 。

727de67fb0616cefcde22054fdc94ecf.png
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值