4.1 数据仓库基础与Apache Hive入门
数据仓库基础与Apache Hive入门
- 一、数据仓库基本概念
- 1、数据仓库概念
- 2、 案例:数据仓库为何而来
- (1)业务数据的存储问题
- (2)分析型决策的制定
- 3、数据仓库主要特征
- 面向主题性(Subject-Oriented)
- 集成性(Integrated)
- 非易失性、非异变性(Non-Volatile)
- 时变性(Time-Variant)
- 4、数据仓库主流开发语言--SQL
- SQL语言介绍
- 数仓与SQL
- 结构化数据
- 二维表结构
- SQL语法分类
- 二、Apache Hive入门
- 1、Apache Hive概述
- 什么是Hive
- 为什么使用Hive
- Hive和Hadoop关系
- 2、场景设计:如何模拟实现Hive功能
- 场景目的
- 映射信息记录
- 映射信息记录
- SQL语法解析、编译
- 对Hive的理解
- 最终效果
- 3、 Apache Hive架构、组件
- Hive架构图
- Hive组件
- 三、Apache Hive安装部署
- 1、Apache Hive元数据
- 什么是元数据
- Hive Metadata
- Hive Metastore
- 2、Apache Hive部署实战
- 3、 Apache Hive客户端使用
- 参考
一、数据仓库基本概念
1、数据仓库概念
数据仓库(英语:Data Warehouse,简称数仓、DW),是一个用于存储、分析、报告的数据系统。
数据仓库的目的是构建面向分析的集成化数据环境,分析结果为企业提供决策支持(Decision Support)。
数仓专注分析
- 数据仓库本身并不“生产”任何数据,其数据来源于不同外部系统;
- 同时数据仓库自身也不需要“消费”任何的数据,其结果开放给各个外部应用使用;
- 这也是为什么叫“仓库”,而不叫“工厂”的原因。
2、 案例:数据仓库为何而来
先下结论:为了分析数据而来,分析结果给企业决策提供支撑。
下面以中国人寿保险公司(chinalife)发展为例,阐述数据仓库为何而来?
(1)业务数据的存储问题
中国人寿保险(集团)公司下辖多条业务线,包括:人寿险、财险、车险,养老险等。各业务线的业务正常运营需要记录维护包括客户、保单、收付费、核保、理赔等信息。这么多业务数据存储在哪里呢?
联机事务处理系统(OLTP) 正好可以满足上述业务需求开展, 其主要任务是执行联机事务处理。其基本特征是前台接收的用户数据可以立即传送到后台进行处理,并在很短的时间内给出处理结果。
关系型数据库(RDBMS) 是OLTP典型应用,比如:Oracle、MySQL、SQL Server等。
(2)分析型决策的制定
随着集团业务的持续运营,业务数据将会越来越多。由此也产生出许多运营相关的困惑:
能够确定哪些险种正在恶化或已成为不良险种?
能够用有效的方式制定新增和续保的政策吗?
理赔过程有欺诈的可能吗?
现在得到的报表是否只是某条业务线的?集团整体层面数据如何?
为了能够正确认识这些问题,制定相关的解决措施,瞎拍桌子是肯定不行的。
最稳妥办法就是:基于业务数据开展数据分析,基于分析的结果给决策提供支撑。也就是所谓的数据驱动决策的制定。
OLTP环境开展分析可行吗?
可以,但是没必要
- OLTP系统的核心是面向业务,支持业务,支持事务。所有的业务操作可以分为读、写两种操作,一般来说读的压力明显大于写的压力。如果在OLTP环境直接开展各种分析,有以下问题需要考虑:
- 数据分析也是对数据进行读取操作,会让读取压力倍增;
- OLTP仅存储数周或数月的数据;
- 数据分散在不同系统不同表中,字段类型属性不统一;
数据仓库面世
- 当分析所涉及数据规模较小的时候,在业务低峰期时可以在OLTP系统上开展直接分析。
- 但为了更好的进行各种规模的数据分析,同时也不影响OLTP系统运行,此时需要构建一个集成统一的数据分析平台。该平台的目的很简单:面向分析,支持分析,并且和OLTP系统解耦合。
- 基于这种需求,数据仓库的雏形开始在企业中出现了。
数据仓库的构建
- 如数仓定义所说,数仓是一个用于存储、分析、报告的数据系统,目的是构建面向分析的集成化数据环境。我们把这种面向分析、支持分析的系统称之为OLAP(联机分析处理)系统。当然,数据仓库是OLAP系统的一种实现。
- 中国人寿保险公司就可以基于分析决策需求,构建数仓平台。
3、数据仓库主要特征
面向主题性(Subject-Oriented)
- 主题是一个抽象的概念,是较高层次上企业信息系统中的数据综合、归类并进行分析利用的抽象。在逻辑意义上,它是对应企业中某一宏观分析领域所涉及的分析对象。
- 传统OLTP系统对数据的划分并不适用于决策分析。而基于主题组织的数据则不同,它们被划分为各自独立的领域,每个领域有各自的逻辑内涵但互不交叉,在抽象层次上对数据进行完整、一致和准确的描述。
集成性(Integrated)
- 主题相关的数据通常会分布在多个操作型系统中,彼此分散、独立、异构。
- 因此在数据进入数据仓库之前,必然要经过统一与综合,对数据进行抽取、清理、转换和汇总,这一步是数据仓库建设中最关键、最复杂的一步,所要完成的工作有:
(1) 要统一源数据中所有矛盾之处;
如字段的同名异义、异名同义、单位不统一、字长不一致等等。
(2)进行数据综合和计算。
数据仓库中的数据综合工作可以在从原有数据库抽取数据时生成,但许多是在数据仓库内部生成的,即进入数据仓库以后进行综合生成的。
下图说明了保险公司综合数据的简单处理过程,其中数据仓库中与“承保”主题有关的数据来自于多个不同的操作型系统。
这些系统内部数据的命名可能不同,数据格式也可能不同。把不同来源的数据存储到数据仓库之前,需要去除这些不一致。
非易失性、非异变性(Non-Volatile)
- 数据仓库是分析数据的平台,而不是创造数据的平台。我们是通过数仓去分析数据中的规律,而不是去创造修改其中的规律。因此数据进入数据仓库后,它便稳定且不会改变。
- 数据仓库的数据反映的是一段相当长的时间内历史数据的内容,数据仓库的用户对数据的操作大多是数据查询或比较复杂的挖掘,一旦数据进入数据仓库以后,一般情况下被较长时间保留。
- 数据仓库中一般有大量的查询操作,但修改和删除操作很少。
时变性(Time-Variant)
- 数据仓库包含各种粒度的历史数据,数据可能与某个特定日期、星期、月份、季度或者年份有关。
- 当业务变化后会失去时效性。因此数据仓库的数据需要随着时间更新,以适应决策的需要。
- 从这个角度讲,数据仓库建设是一个项目,更是一个过程 。
4、数据仓库主流开发语言–SQL
数仓作为面向分析的数据平台,其主职工作就是对存储在其中的数据开展分析,那么如何读取数据分析呢?
- 理论上来说,任何一款编程语言只要具备读写数据、处理数据的能力,都可以用于数仓的开发。比如大家耳熟能详的C、java、Python等;
- 关键在于编程语言是否易学、好用、功能是否强大。遗憾的是上面所列出的C、Python等编程语言都需要一定的时间进行语法的学习,并且学习语法之后还需要结合分析的业务场景进行编码,跑通业务逻辑。
- 不管从学习成本还是开发效率来说,上述所说的编程语言都不是十分友好的。
- 在数据分析领域,不得不提的就是SQL编程语言,应该称之为分析领域主流开发语言。
SQL语言介绍
- 结构化查询语言(Structured Query Language)简称SQL,是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理数据。
- SQL语言使我们有能力访问数据库,并且SQL是一种ANSI(美国国家标准化组织)的标准计算机语言,各大数据库厂商在生产数据库软件的时候,几乎都会去支持SQL的语法,以使得用户在使用软件时更加容易上手,以及在不同厂商软件之间进行切换时更加适应,因为大家的SQL语法都差不多。
- SQL语言功能很强,十分简洁,核心功能只用了9个动词。语法接近英语口语,所以,用户很容易学习和使用。
数仓与SQL
- 虽然SQL语言本身是针对数据库软件设计的,但是在数据仓库领域,尤其是大数据数仓领域,很多数仓软件都会去支持SQL语法;
- 原因在于一是用户学习SQL成本低,二是SQL语言对于数据分析真的十分友好,爱不释手。
结构化数据
- 结构化数据也称作行数据,是由二维表结构来逻辑表达和实现的数据,严格地遵循数据格式与长度规范,主要通过关系型数据库进行存储和管理。
- 与结构化数据相对的是不适于由数据库二维表来表现的非结构化数据,包括所有格式的办公文档、XML、HTML、各类报表、图片和音频、视频信息等。
- 通俗来说,结构化数据会有严格的行列对齐,便于解读与理解。
二维表结构
- 表由一个名字标识(例如“客户”或者“订单”),叫做表名。表包含带有数据的记录(行)。
- 下面的例子是一个名为 “Persons” 的表,包含三条记录(每一条对应一个人)和五个列(Id、姓、名、地址和城市)。
SQL语法分类
SQL主要语法分为两个部分:数据定义语言 (DDL)和数据操纵语言 (DML) 。
DDL语法使我们有能力创建或删除表,以及数据库、索引等各种对象,但是不涉及表中具体数据操作:
CREATE DATABASE - 创建新数据库
CREATE TABLE - 创建新表DML语法是我们有能力针对表中的数据进行插入、更新、删除、查询操作:
SELECT - 从数据库表中获取数据
UPDATE - 更新数据库表中的数据
DELETE - 从数据库表中删除数据
INSERT - 向数据库表中插入数据
二、Apache Hive入门
1、Apache Hive概述
什么是Hive
- Apache Hive是一款建立在Hadoop之上的开源数据仓库系统,可以将存储在Hadoop文件中的结构化、半结构化数据文件映射为一张数据库表,基于表提供了一种类似SQL的查询模型,称为Hive查询语言(HQL),用于访问和分析存储在Hadoop文件中的大型数据集。
- Hive核心是将HQL转换为MapReduce程序,然后将程序提交到Hadoop群集执行。
- Hive由Facebook实现并开源。
为什么使用Hive
- 使用Hadoop MapReduce直接处理数据所面临的问题
人员学习成本太高 需要掌握java语言
MapReduce实现复杂查询逻辑开发难度太大 - 使用Hive处理数据的好处
操作接口采用类SQL语法,提供快速开发的能力(简单、容易上手)
避免直接写MapReduce,减少开发人员的学习成本
支持自定义函数,功能扩展很方便
背靠Hadoop,擅长存储分析海量数据集
Hive和Hadoop关系
- 从功能来说,数据仓库软件,至少需要具备下述两种能力:
存储数据的能力、分析数据的能力 - Apache Hive作为一款大数据时代的数据仓库软件,当然也具备上述两种能力。只不过Hive并不是自己实现了上述两种能力,而是借助Hadoop。
Hive利用HDFS存储数据,利用MapReduce查询分析数据。 - 这样突然发现Hive没啥用,不过是套壳Hadoop罢了。其实不然,Hive的最大的魅力在于用户专注于编写HQL,Hive帮您转换成为MapReduce程序完成对数据的分析。
2、场景设计:如何模拟实现Hive功能
如果让您设计Hive这款软件,要求能够实现用户只编写sql语句,Hive自动将sql转换MapReduce程序,处理位于HDFS上的结构化数据。如何实现?
在HDFS文件系统上有一个文件,路径为/data/china_user.txt;需求:统计来自于上海年龄大于25岁的用户有多少个?
场景目的
- 重点理解下面两点:
Hive能将数据文件映射成为一张表,这个映射是指什么?
Hive软件本身到底承担了什么功能职责?
映射信息记录
- 映射在数学上称之为一种对应关系,比如y=x+1,对于每一个x的值都有与之对应的y的值。
- 在hive中能够写sql处理的前提是针对表,而不是针对文件,因此需要将文件和表之间的对应关系描述记录清楚。
- 映射信息专业的叫法称之为元数据信息(元数据是指用来描述数据的数据 metadata)。
映射信息记录
具体来看,要记录的元数据信息包括:
表对应着哪个文件(位置信息)
表的列对应着文件哪一个字段(顺序信息)
文件字段之间的分隔符是什么
SQL语法解析、编译
- 用户写完sql之后,hive需要针对sql进行语法校验,并且根据记录的元数据信息解读sql背后的含义,制定执行计划。
- 并且把执行计划转换成MapReduce程序来具体执行,把执行的结果封装返回给用户。
对Hive的理解
- Hive能将数据文件映射成为一张表,这个映射是指什么?
文件和表之间的映射关系 - Hive软件本身到底承担了什么功能职责?
Sql语法解析编译成为MapReduce
最终效果
- 基于上述分析,最终要想模拟实现的Hive的功能,大致需要下图所示组件参与其中。
- 从中可以感受一下Hive承担了什么职责,当然,也可以把这个理解为Hive的架构图。
3、 Apache Hive架构、组件
Hive架构图
Hive组件
(1)用户接口
包括 CLI、JDBC/ODBC、WebGUI。其中,CLI(command line interface)为shell命令行;Hive中的Thrift服务器允许外部客户端通过网络与Hive进行交互,类似于JDBC或ODBC协议。WebGUI是通过浏览器访问Hive。
(2)元数据存储
通常是存储在关系数据库如 mysql/derby中。Hive 中的元数据包括表的名字,表的列和分区及其属性,表的属性(是否为外部表等),表的数据所在目录等。
(3)Driver驱动程序,包括语法解析器、计划编译器、优化器、执行器
完成 HQL 查询语句从词法分析、语法分析、编译、优化以及查询计划的生成。生成的查询计划存储在 HDFS 中,并在随后有执行引擎调用执行。
(4)执行引擎
Hive本身并不直接处理数据文件。而是通过执行引擎处理。当下Hive支持MapReduce、Tez、Spark3种执行引擎。
三、Apache Hive安装部署
1、Apache Hive元数据
什么是元数据
元数据(Metadata),又称中介数据、中继数据,为描述数据的数据(data about data),主要是描述数据属性(property)的信息,用来支持如指示存储位置、历史数据、资源查找、文件记录等功能。
Hive Metadata
- Hive Metadata即Hive的元数据。
- 包含用Hive创建的database、table、表的位置、类型、属性,字段顺序类型等元信息。
- 元数据存储在关系型数据库中。如hive内置的Derby、或者第三方如MySQL等。
Hive Metastore
- Metastore即元数据服务。Metastore服务的作用是管理metadata元数据,对外暴露服务地址,让各种客户端通过连接metastore服务,由metastore再去连接MySQL数据库来存取元数据。
- 有了metastore服务,就可以有多个客户端同时连接,而且这些客户端不需要知道MySQL数据库的用户名和密码,只需要连接metastore 服务即可。某种程度上也保证了hive元数据的安全。
2、Apache Hive部署实战
3、 Apache Hive客户端使用
参考
资料来源于《黑马程序员-大数据Hadoop入门》
4.1 数据仓库基础与Apache Hive入门相关推荐
- Apache Hive入门1
Apache Hive入门1 Hive是Hadoop项目中的一个子项目,由FaceBook向Apache基金会贡献,其中TaoBao也是其中一位使用者+贡献者,Hive被视为 一个仓库工具,可以将结构 ...
- Apache Hive入门:模拟实现Hive功能、Hive架构、 组件
一.Apache Hive概述 什么是Hive Apache Hive是一款建立在Hadoop之上的开源数据仓库系统,可以将存储在Hadoop文件中的结构化.半结构化数据文件映射为一张数据库表, 基 ...
- 数据仓库——Hive入门介绍
一,什么是Hive: 1.Hive是建立在Hadoop HDFS上的数据仓库基础架构; 2.Hive可以用来进行数据提取转化加载(ETL) 3.Hive定义了简单的类似SQL查询语言,称为HQL它允许 ...
- Apache Hive 快速入门 (CentOS 7.3 + Hadoop-2.8 + Hive-2.1.1)
2019独角兽企业重金招聘Python工程师标准>>> 本文节选自<Netkiller Database 手札> 第 63 章 Apache Hive 目录 63.1. ...
- Apache Hive实战基础
本节目标 了解Hive的作用和优势 了解Hive的基本架构 了解Hive的数据类型 了解Hive的数据库和表操作 理解Hive的数据分区 理解Hive的数据分桶 4.1 数据仓库 4.1.1 为什么要 ...
- Apache+Hudi入门指南: Spark+Hudi+Hive+Presto
一.整合 hive集成hudi方法:将hudi jar复制到hive lib下 cp ./packaging/hudi-hadoop-mr-bundle/target/hudi-hadoop-mr-b ...
- Apache Hive JdbcStorageHandler 编程入门指南
以下博文转载自:https://www.iteblog.com/archives/2525.html Apache Hive 从 HIVE-1555 开始引入了 JdbcStorageHandler ...
- Hive总结(六)hive入门经典
转自:http://www.zypx.cn/technology/20100606132430320046.html Hive 是什么 在接触一个新的事物首先要回到的问题是:这是什么? 这里引用 Hi ...
- 大数据技术之Hive(二)Hive入门
一.Hive入门 1.1 Hive简介 1.1.1 hive出现的原因 FaceBook网站每天产生海量的结构化日志数据,为了对这些数据进行管理,并且因为机器学习的需求,产生了hive这门技术,并继续 ...
最新文章
- mac通过tree源码编译安装tree
- linux rpm目录,Linux修改RPM的安装目录的方法
- mysql sycho_Java面试题 - osc_p1rj1z8j的个人空间 - OSCHINA - 中文开源技术交流社区
- SQL Server表分区【转】
- Bootstrap全局css样式_表单
- 异或!!不占用额外空间!!
- Java学习总结之第十一章 Java集合
- 剥开比原看代码07:比原节点收到“请求区块数据”的信息后如何应答?
- 封装jquery的ajax,便于加载等待提示框
- 《大数据》2015年第3期“网络大数据专题”——大数据时代的互联网分析引擎...
- 温昱:架构实践全景图
- configure: error: Can‘t find ext2fs library
- 《MySQL数据库》关联查询
- 《架构探险——从零开始写javaweb框架》.pdf
- Contacts Journal CRM 1.7 Mac 破解版 Mac上强大的客户关系管理软件
- 格雷码与二进制转换的verilog实现
- SpringCloud分布式开发理解
- DFI、DPI、端口识别技术
- Python内置函数及其用法
- java map.put map_java中map的put方法
热门文章
- 栖霞牌王是怎样炼成的——利用django实现网页版千秋戏(1)
- 机械加工中304不锈钢与316不锈钢有什么区别?
- 《操作系统》工作集详解
- 深度剖析家用洗地机的方案设计
- UE4-(雾效)大气雾
- 使用parent.layer.open()打开页面如何调用子页面的方法
- 罗德里格旋转和李群、李代数的指数映射的关系
- Echarts自定义数据视图(DataView)-按钮名称-刷新方法
- 【图像去噪】基于matlab自适应中值滤波图像去噪【含Matlab 1156期】
- adams数据导出matlab,adams数据导入matlab