Hadoop之Hive

Posted _TIM_

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Hadoop之Hive相关的知识,希望对你有一定的参考价值。

数据仓库

数据仓库的目的是构建面向分析的集成化数据环境,为企业提供决策支持。数据仓库是存数据的,企业的各种数据往里面存,主要目的是为了分析有效数据,后续会基于它产出供分析挖掘的数据,或者数据应用需要的数据,如企业的分析性报告和各类报表等。可以理解为: 面向分析的存储系统

当企业需要对不同来源、不同形式、不同主题的数据整合起来,供给数据分析、数据挖掘、数据报表使用时,有这么一个中间层将各种原始数据科学地加工处理成下游需要的样子。这个中间层就是数据仓库产生价值的地方

主要特征

数据仓库是面向主题的集成的非易失的时变的数据集合,用以支持管理决策。
面向主题:数据仓库是面向主题的,数据仓库通过一个个主题域将多个业务系统的数据加载到一起,为了各个主题(如:用户、订单、商品等)进行分析而建,操作型数据库是为了支撑各种业务而建立。

操作型数据库主要服务于日常的业务操作,使得数据库需要不断地对数据实时更新,以便迅速获得当前最新数据,不至于影响正常的业务运作。在数据仓库中只要保存过去的业务数据,不需要每一笔业务都实时更新数据仓库,而是根据商业需要每隔一段时间把一批较新的数据导入数据仓库。 数据仓库的数据反映的是一段相当长的时间内历史数据的内容,是不同时点的数据库的集合,以及基于这些快照进行统计、综合和重组的导出数据。数据仓库中的数据一般仅执行查询操作,很少会有删除和更新。但是需定期加载和刷新数据。

数据仓库的分层

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

  • 源数据层(ODS) :此层数据无任何更改,直接沿用外围系统数据结构和数据,不对外开
    放;为临时存储层,是接口数据的临时存储区域,为后一步的数据处理做准备。
  • 数据仓库层(DW) :也称为细节层,DW层的数据应该是一致的、准确的、干净的数据,即对源系统数据进行了清洗(去除了杂质)后的数据。
    -数据应用层(DA或APP) :前端应用直接读取的数据源;根据报表、专题分析需求而计算生成的数据。

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

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

清晰的数据结构: 每层数据都有各自的作用域和职责,在使用表的时候更方便定位和理解。
减少重复开发: 规范数据分层,开发一层公用的中间层数据,减少重复计算流转数据。
统一数据出口: 通过数据分层,提供统一的数据出口,保证对外输出数据口径一致。
简化问题: 通过数据分层,将复杂的业务简单化,将复杂的业务拆解为多层数据,每层数据负责解决特定的问题。
空间换时间: 通过建设多层次的数据模型供用户使用,避免用户直接使用操作型数据,可以更高效的访问数据

数据库与数据仓库区别

数据库: 传统关系型数据库的主要应用是OLTP,主要是基本的、日常的事务处理,例如银行交易。主要用于业务类系统,主要供基层人员使用,进行一线业务操作。也可以称面向交易的处理系统,它是针对具体业务在数据库联机的日常操作,通常对少数记录进行查询、修改。用户较为关心操作的响应时间、数据的安全性、完整性和并发支持的用户数等问题。传统的数据库系统作为数据管理的主要手段,主要用于操作型处理。
数据仓库: 数仓系统的主要应用主要是OLAP,支持复杂的分析操作,侧重决策支持,并且提供直观易懂的查询结果。OLAP数据分析的目标是探索并挖掘数据价值,作为企业高层进行决策的参考。
小结: 首先要明白,数据仓库的出现,并不是要取代数据库。

  • 数据库是面向事务的设计,数据仓库是面向主题设计的。
  • 数据库一般存储业务数据,数据仓库存储的一般是历史数据
  • 数据库设计是尽量避免冗余,一般针对某一业务应用进行设计,比如一张简单的User表,记录用户名、密码等简单数据即可,符合业务应用,但是不符合分析。数据仓库在设计是有意引入冗余,依照分析需求,分析维度、分析指标进行设计。
  • 数据库是为捕获数据而设计,数据仓库是为分析数据而设计。

数据集市和数据仓库的主要区别?

数据仓库是企业级的,能为整个企业各个部门的运行提供决策支持手段;
数据集市则是一种微型的数据仓库,它通常有更少的数据,更少的主题区域,以及更少的历史数据,因此是部门级的,一般只能为某个局部范围内的管理人员服务,因此也称之为部门级数据仓库。

数仓的元数据管理

元数据主要记录数据仓库中模型的定义、各层级间的映射关系、监控数据仓库的数据状态及ETL的任务运行状态。一般会通过元数据资料库来统一地存储和管理元数据,其主要目的是使数据仓库的设计、部署、操作和管理能达成协同和一致。元数据是数据仓库管理系统的重要组成部分,元数据管理是企业级数据仓库中的关键组件,贯穿数据仓库构建的整个过程,直接影响着数据仓库的构建、使用和维护。

元数据可分为技术元数据业务元数据。技术元数据为开发和管理数据仓库的IT人员使用,它描述了与数据仓库开发、管理和维护相关的数据,包括数据源信息、数据转换描述、数据仓库模型、数据清洗与更新规则、数据映射和访问权限等。而业务元数据为管理层和业务分析人员服务,从业务角度描述数据,包括商务术语、数据仓库中有什么数据、数据的位置和数据的可用性等,帮助业务人员更好地理解数据仓库中哪些数据是可用的以及如何使用。

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

Hive

Hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供类SQL查询功能。其本质是将SQL转换为MapReduce的任务进行运算,底层由HDFS来提供数据的存储,说白了Hive可以理解为一个将SQL转换为MapReduce的任务的工具,甚至更进一步可以说Hive就是一个MapReduce的客户端
为什么使用 Hive

  • 采用类SQL语法去操作数据,提供快速开发的能力
  • 避免了去写MapReduce,减少开发人员的学习成本
  • 功能扩展很方便

用户接口: 包括CLIJDBC/ODBCWebGUI。其中,CLI为shell命令行;JDBC/ODBCHiveJAVA实现,与传统数据库JDBC类似;WebGUI是通过浏览器访问Hive
元数据存储: 通常是存储在关系数据库如mysql/derby中。Hive将元数据存储在数据库
中。Hive中的元数据包括表的名字,表的列和分区及其属性,表的属性(是否为外部表
等),表的数据所在目录等。
解释器、编译器、优化器、执行器: 完成HQL查询语句从词法分析、语法分析、编译、优
化以及查询计划的生成。生成的查询计划存储在HDFS中,并在随后有MapReduce调用执
行。

Hive利用HDFS存储数据,利用MapReduce查询分析数据,Hive与传统数据库对比,用于海量数据的离线数据分析,Hive处理数据规模大,但是延迟高,关系型数据库规模小但是延迟小。

以上是关于Hadoop之Hive的主要内容,如果未能解决你的问题,请参考以下文章

Hadoop之Hive的排序

Hadoop3集群搭建之——hive添加自定义函数UDFUDTF

Hadoop3集群搭建之——hive添加自定义函数UDTF (一行输入,多行输出)

Hadoop 之 Hive 安装与配置

Hadoop之Hive函数

Hadoop之Hive的Join语句