数据库Hive 总结

一、数据仓库的介绍
1.1 数据仓库的基本概念

数据仓库,英文名称为 Data Warehouse,可简写为 DW 或 DWH。数据仓库顾名思义,是一个很大的数据存储集合,出于企业的分析性报告和决策支持目的而创建,对多样的业务数据进行筛选与整合。它为企业提供一定的 BI (商业智能)能力,指导业务流程改进、监视时间、成本、质量以及控制。数据仓库的输入方是各种各样的数据源,最终的输出用于企业的数据分析、数据挖掘、数据报表等方向。
在这里插入图片描述
1.2 数据仓库的主要特征

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

    主题性。不同于传统数据库对应于某一个或多个项目,数据仓库根据使用者实际需求,将不同数据源的数据在一个较高的抽象层次上做整合,所有数据都围绕某一主题来组织。这里的主题怎么来理解呢?比如对于城市,“天气湿度分析” 就是一个主题,对于淘宝,“用户点击行为分析” 就是一个主题。
    集成性。数据仓库中存储的数据是来源于多个数据源的集成,原始数据来自不同的数据源,存储方式各不相同。要整合成为最终的数据集合,需要从数据源经过一系列抽取、清洗、转换的过程。
    稳定性。数据仓库中保存的数据是一系列历史快照,不允许被修改。用户只能通过分析工具进行查询和分析。这里说明一点,数据仓库基本上是不许允许用户进行修改,删除操作的。大多数的场景是用来查询分析数据。
    时变性。数据仓库会定期接收新的集成数据,反应出最新的数据变化。这和稳定特点并不矛盾。

1.3 数据仓库与数据库区别

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

1.3.2 数据仓库。 数据仓库一般针对某些主题的历史数据进行分析,支持管理决策,又被称为联机分析处理 OLAP((On-Line Analytical Processing)。首先要明白,数据仓库的出现,并不是要取代数据库。

1.3.3 两者区别。

    数据库是面向事务的设计,数据仓库是面向主题设计的。
    数据库一般存储业务数据,数据仓库存储的一般是历史数据。
    数据库设计是尽量避免冗余,一般针对某一业务应用进行设计,比如一张简单的 User 表,记录用户名、密码等简单数据即可,符合业务应用,但是不符合分析。数据仓库在设计是有意引入冗余,依照分析需求,分析维度、分析指标进行设计。
    数据库是为捕获数据而设计,数据仓库是为分析数据而设计。以银行业务为例。数据库是事务系统的数据平台,客户在银行做的每笔交易都会写入数据库,被记录下来,这里,可以简单地理解为用数据库记账。
    数据仓库是分析系统的数据平台,它从事务系统获取数据,并做汇总、加工,为决策者提供决策的依据。比如,某银行某分行一个月发生多少交易,该分行当前存款余额是多少。如果存款又多,消费交易又多,那么该地区就有必要设立 ATM 了。 显然,银行的交易量是巨大的,通常以百万甚至千万次来计算。事务系统是实时的,这就要求时效性,客户存一笔钱需要几十秒是无法忍受的,这就要求数据库只能存储很短一段时间的数据。而分析系统是事后的,它要提供关注时间段内所有的有效数据。这些数据是海量的,汇总计算起来也要慢一些,但是,只要能够提供有效的分析数据就达到目的了。 数据仓库,是在数据库已经大量存在的情况下,为了进一步挖掘数据资源、为了决策需要而产生的,它决不是所谓的“大型数据库”。

1.4 数据仓库分层架构

按照数据流入流出的过程,数据仓库架构可分为三层——源数据、数据仓库、数据应用。
在这里插入图片描述
数据仓库的数据来源于不同的源数据,并提供多样的数据应用,数据自下而上流入数据仓库后向上层开放应用,而数据仓库只是中间集成化数据管理的一个平台。

    源数据层(ODS):操作性数据(Operational Data Store),是作为数据库到数据仓库的一种过渡,ODS 的数据结构一般与数据来源保持一致,而且 ODS 的数据周期一般比较短。ODS 的数据为后一步的数据处理做准备。
    数据仓库层(DW):数据仓库(Data Warehouse),是数据的归宿,这里保持这所有的从 ODS 到来的数据,并长期报错,而且这些数据不会被修改,DW层的数据应该是一致的、准确的、干净的数据,即对源系统数据进行了清洗(去除了杂质)后的数据。
    数据应用层(DA):数据应用(Data Application),为了特定的应用目的或应用范围,而从数据仓库中独立出来的一部分数据,也可称为部门数据或主题数据,该数据面向应用。如根据报表、专题分析需求而计算生成的数据。

1.5 数据仓库之 ETL

ETL,是英文 Extract-Transform-Load 的缩写,用来描述将数据从来源端经过 抽取(extract)、转换(transform)、加载(load) 至目的端的过程。ETL 是将业务系统的数据经过抽取、清洗、转换之后加载到数据仓库的过程,目的是将企业中分散、零乱、标准不统一的数据整合到一起。ETL 是数据仓库的流水线,也可以认为是数据仓库的血液,它维系着数据仓库中数据的新陈代谢,而数据仓库日常的管理和维护工作的大部分精力就是保持 ETL 的正常和稳定。
在这里插入图片描述
二、Hive 简介
2.1 什么是 Hive?

Hive 是基于 Hadoop 的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供简单的 SQL 查询功能,并可以将 SQL 语句转换为 MapReduce 任务进行运行。Hive 定义了简单的类 SQL 查询语言,称为 HiveQL,简写为 HQL,它允许熟悉 SQL 的用户查询数据。同时,这个语言也允许熟悉 MapReduce 开发者的开发自定义的 Mapper 和 Reducer 来处理内建的 Mapper 和 Reducer 无法完成的复杂的分析工作。在实际开发中, 80% 的操作都不会由 MapReduce 程序直接完成,而是由 Hive 来完成,所以 Hive 的使用频率非常高,而且也易于用户使用。只要用户对 SQL 熟练,即可掌握 Hive。Hive 提交任务的过程严格遵守 MapReduce 的执行流程:将用户提交的 SQL 语句通过 Hive 的解释器转换成 MapReduce 作业提交到 Hadoop 集群中,Hadoop 监控作业执行的详细过程,最后将执行结果返回给提交者。
2.2 为什么使用 Hive?

通过上面的介绍了解到,MapReduce 的实现逻辑太难不易理解,所以出现了 Hive。Hive 具有以下两个优点:

    开发周期短。Hive 可以缩短开发周期,但并不是说 Hive 可以提供更快地开发 Map 和 Reduce 任务的方法,而是定义了一种类似 SQL 的查询语言。Hive 使用 HQL 语句表述查询操作,并将其自动转换成一个或多个 MapReduce 作业,然后执行这些 MapReduce 的程序并将结果反馈给用户,省去了编译 ⇒ 提交这一过程,缩短了开发周期。
    减轻开发人员的学习成本与负担。之前,用户要想使用 Hadoop,首先必须要掌握软件开发的编程语言和 MapReduce 的编程思想。而现在,只要熟悉 SQL 的用户都可以通过 Hive 来操作 Hadoop。

2.3 Hive 的体系结构

与 Hadoop 的 HDFS 和 MapReduce 计算框架不同,Hive 并不是分布式的,它独立于集群之外,可以看作是一个 Hadoop 的客户端,Hadoop 的体系结构如下图所示:
在这里插入图片描述
Hive 体系结构是由多个组件组成的,其中包含元数据(MetaStore)、驱动(包含编译器、优化器、执行器)、用户接口(包含客户端、UI、ThriftServer),下面分别进行介绍:

    元数据(MetaStore)。元数据通常存储在关系型数据库(RDBMS)中,如 MySQL、Derby。元数据中包含了表名、列名、字段名、分区、表的类型(是否属于外部表)和数据存储的路径等信息。Hive 将 HDFS 上的结构化的数据通过元数据映射为一张张表,这样用户可以通过 HQL 对数据进行查询。Derby 数据库的缺点:在同一个目录下一次只能打开一个会话,使用 Derby存储方式时,Hive 会在当前目录生成一个 derby.log 文件和一个 metastore_db 目录,metastore_db 里面会存储具体的元数据信息,如果下次切换到一个另一个新目录访问 Hive,则会重新生成 derby.log 文件和 metastore_db 目录,这样就没有办法使用之前的元数据信息了。推荐使用 MySQL 作为外置存储引擎,可以支持多用户同时访问以及元数据共享。
    驱动(Driver)。Hive 的驱动在接收到 HQL 语句后,通过创建会话来启动语句的执行,并监控执行的生命周期和进度。同时,它会将 HQL 在执行过程中产生的元数据信息进行存储。编译器、优化器、执行器完成 HQL 查询语句从词法分析、语法分析、编译、优化以及查询计划的生成。生成的查询计划存储在 HDFS 中,并在随后有 MapReduce 调用执行。
    用户接口。客户端在日常开发中较为频繁,启动 Hive 终端会同时启动一个 Hive 副本,用户可以使用JDBC(或ODBC)客户端连接到 Hive Server。Hive 的数据存储在 HDFS 中,大部分的查询、计算会启动 MapReduce 任务,但查询不会生成 MapReduce 任务,如 SELECT * FROM tb; 如果在 SQL 语句后面再增加 where 过滤条件就会生成 MapReduce 任务了。

拓展:从 Hive2 开始,其实官方就不建议默认使用 MapReduce 引擎了,而是建议使用 Tez 引擎或者是 Spark 引擎,不过目前一直到最新的 3.x 版本中 MapReduce 还是默认的执行引擎。其实大数据计算引擎是有几个发展阶段的,首先是第一代大数据计算引擎:MapReduce,接着是第二代大数据计算引擎:Tez,Tez 的存在感比较低,它是源于 MapReduce,主要和 Hive 结合在一起使用,它的核心思想是将 Map 和 Reduce 两个操作进一步拆分,这些分解后的元操作可以灵活组合,产生新的操作,这些操作经过一些控制程序组装后,可以形成一个大的作业,这样可以提高计算效率,在实际工作中 Hive 使用的就是 Tez 引擎,替换 Hive 的执行引擎也很简单,只需要把 Tez 安装好(Tez 也是支持在 YARN 上执行的),然后到 Hive 中配置一下就可以了,不管使用什么引擎,不会对我们使用 Hive 造成什么影响,也就说对上层的使用没有影响。接着是第三代大数据计算引擎: Spark,Spark 在当时属于一个划时代的产品,改变了之前基于磁盘的计算思路,而是采用内存计算,就是说 Spark 把数据读取过来以后,中间的计算结果是不会进磁盘的,一直到出来最终结果,才会写磁盘,这样就大大提高了计算效率,而 MapReduce 的中间结果是会写磁盘的,所以效率没有 Spark 高。Spark 的执行效率号称比 MapReduce 快100倍,当然这需要在一定数据规模下才会差这么多,如果我们就计算几十兆或者几百兆的文件,你去对比发现其实也不会差多少,注意:Spark 也是支持在 YARN 上执行的。其实目前还有第四代大数据计算引擎:Flink,Flink 是一个可以支持纯实时数据计算的计算引擎,在实时计算领域要优于 Saprk,Flink 和 Spark 其实是有很多相似之处,在某些方面他们两个属于互相参考,互相借鉴,互相成长。注意:Flink 也是支持在 YARN 上执行的。MapReduce、Tez、Spark、Flink 这些计算引擎都是支持在 YARN 上执行的,所以说 Hadoop2 中对架构的拆分是非常明智的。
2.4 Hive 与关系型数据库区别

Hive 的查询语言 HQL 支持 SQL-92 标准,这与 SQL 非常类似,因此 Hive 会被误解当成关系型数据库。但是,Hive 和关系型数据库除了查询语句类似外,再无相似之处,两者的区别如下表所示:
对比项    Hive    RMDBS
查询语句    HQL    SQL
数据存储位置    Hadoop分布式文件系统(HDFS)    本地文件系统
数据格式    用户定义    系统决定
数据更新    不支持    支持
索引    支持,但与RMDBS的索引并不相同    支持
执行引擎    MapReduce    Executor
执行延迟    高    低
可扩展性    高    低
数据规模    海量    小
————————————————
版权声明:本文为CSDN博主「Amo Xiang」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/xw1680/article/details/118675528

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值