第1章 入门及库表操作
1.1数据仓库概述
1、数据仓库的定义
数据仓库是一种面向商务智能 (BI) 活动(尤其是分析)的数据管理系统,它仅适用于查询和分析,通常涉及大量的历史数据。在实际应用中,数据仓库中的数据一般来自应用日志文件和事务应用等广泛来源。
数据仓库能够集中、整合多个来源的大量数据,借助数据仓库的分析功能,企业可从数据中获得宝贵的业务洞察,改善决策。同时,随着时间推移,它还会建立一个对于数据科学家和业务分析人员极具价值的历史记录。得益于这些强大的功能,数据仓库可为企业提供一个“单一信息源”。
2.数据仓库的架构
数据仓库的架构取决于企业的需求。通用数据仓库架构具有以下特点:
简单:所有数据仓库都采用同一基本设计,将元数据、概要数据和原始数据全部存储在中央信息库中。信息库一端由数据源馈送信息,另一端则供最终用户访问,以便进行分析、报告和数据挖掘。
通过暂存区简化数据准备:将操作型数据置入数据仓库之前,必须首先进行清理和处理。这一步骤可通过编程方式完成,但很多数据仓库会创建一个暂存区来简化数据准备工作。
星型结构:通过在中央信息库和最终用户之间创建数据集市,企业可以对数据仓库进行自定义,灵活满足各种业务线的需求。换言之,准备就绪后,数据不会立即进入数据仓库,而是会被移至适当的数据集市。
沙盒:沙盒可提供一个专有的安全区域,帮助企业快速、非正式地探索新的数据集或新的数据分析方式,而无需遵守或遵循数据仓库的正式规则和协议。
3.数据仓库的进化
数据仓库首次出现于 20 世纪 80 年代末,其最初目的是帮助数据从操作系统“流入”决策支持系统 (DSS)。
早期的数据仓库需要大量冗余:大多数企业为了满足各种用户的需求而采用多个 DSS 环境,虽然各个 DSS 环境使用的数据大部分相同,但通常还是要分别执行数据收集、清理和集成。
而后,随着效率不断提升,数据仓库也从服务传统 BI 平台的信息存储库变成了服务一系列广泛应用(例如运营分析和绩效管理)的分析基础设施。
如今,经过长期迭代,数据仓库取得了长足的发展,企业级数据仓库 (EDW) 能够为企业创造越来越多的价值。
4.云数据仓库
云数据仓库使用云技术来提取和存储不同数据源的数据。
原始数据仓库一开始是构建在本地服务器上。现在,这些本地数据仓库仍然拥有很多优势,在许多情况下可以提供更高的治理水平、安全性、数据主权以及较低延迟。然而,本地数据仓库的弹性较低,需要企业通过复杂的预测来确定如何扩展数据仓库,以满足未来需求。另外,本地数据仓库在管理上也非常复杂。
相比之下,云数据仓库可提供以下优势:
提供弹性的可扩展支持,可满足大型或可变计算或存储需求
简单易用
易于管理
节约成本
理想的云数据仓库应当支持完全托管和自治驾驶,确保即使是初学者也只需数次单击操作就能创建和使用数据仓库。有一种简单方法可以迁移到云数据仓库,那就是在符合数据主权和安全要求的数据中心防火墙后面运行本地云数据仓库。
此外,大多数云数据仓库采用“按量计费”模式,可节省更多成本。
5.什么是现代数据仓库
企业中不同用户(例如 IT 部门、数据工程、业务分析和数据科学团队的成员)对数据仓库的需求各不相同。
现代数据架构可有效管理所有数据类型、工作负载和分析,满足这些需求。它包含架构模式以及符合行业优秀实践的必要集成组件。现代数据仓库包括:
融合数据库,可简化所有数据类型的管理并支持多种数据使用方法
自助式数据提取和转换服务
支持 SQL、机器学习、图形和空间处理
多种分析选项,可轻松使用数据而无需移动数据
自动化流程,可简化供应、扩展和管理
现代数据仓库可高效简化数据工作流,任何其他仓库都无法企及。这意味着从分析师、数据工程师到数据科学家和 IT 团队的每一个人都可以更加有效地开展工作和创新,从而推动企业发展,而不会发生不计其数的延迟和复杂性
1.2Hive环境配置
- 安装JDK
(1)下载
下载JDK7,因为和hadoop版本匹配。其他步骤和以下一样(之前错下了JDK21)
网址:https://www.oracle.com/java/technol
(2)配置环境变量
系统变量:
变量名:JAVA_HOME
变量值:C:\Program Files\Java\jdk-21
环境变量:
在path下新建环境变量:%JAVA_HOME%\bin;
%JAVA_HOME%\jre\bin
如果下载的目录里面没有jre文件夹,用管理员命令运行cmd,cd到jdk21文件夹下,输入命令bin\jlink.exe --module-path jmods --add-modules java.desktop --output jre
打开cmd,输入java测试是否安装成功
2.安装Hadoop
(1)下载并解压
链接:https://pan.baidu.com/s/1ydyitOzJZVRNTnOls5Awzg
提取码:8888
补充:原有的hadoop-2.7.7/bin目录下没有文件是winutils和hadoop.dll文件的,需要下载hadooponwindows-master并将其bin覆盖原先的bin,这里我提供的资源是已经覆盖了的,可省略该操作。
(2)配置系统变量和环境变量
变量名:HADOOP_HOME
变量值:D:\SCU\研究生课程\大数据\Hadoop\hadoop-2.7.7(下载的路径)
环境变量:
环境变量值:%HADOOP_HOME%\bin,
Win+R cmd,输入hadoop,查看是否配置成功
1.3 Hive 产生背景与架构设计
1.Hive产生背景
传统Hadoop架构存在的一些问题
MapReduce编程必须掌握Java,门槛较高
传统数据库开发、DBA、运维人员学习门槛高
HDFS上没有Schema的概念,仅仅是一个纯文本文件
Hive的产生
为了让用户从一个现有数据基础架构转移到Hadoop上
现有数据基础架构大多基于关系型数据库和SQL查询
Facebook诞生了Hive
2.Hive是什么
它是基于Hadoop的数据仓库工具
方便的将结构化数据文件映射为一张数据库表
提供SQL查询功能,SQL语句底层转换为MR作业执行
Hive提供了一系列功能可以方便进行数据ETL
Hive目前是Apache基金会的顶级项目
Hive作为数据仓库工具,非常适合数据仓库联机分析处理(OLAP)
3.Hive在Hadoop生态系统中的位置
4.Hive与传统关系型数据库的异同
5.Hive的特点及优势
Hive与SQL有着相似的语法,大大提高开发效率
Hive支持运行在不同的计算框架上
MapReduce、Tez、Spark、Flink等
Hive支持HDFS与HBase上的ad-hoc(点对点模式)
Hive支持用户自定义函数、脚本等
在生产环境中,Hive有如下优势
可扩展,Hive可以自由扩展集群规模
延展性,Hive支持自定义函数,用户可根据需求自定义
容错性,良好的容错性
6.Hive的架构设计
Hive的架构设计包括三个部分
Hive Client
Hive客户端,可通过Java、Python等语言连接Hive并进行与RDBMS类似的SQL查询操作
Hive Service
Hive服务端,客户端必须通过服务端与Hive交互,主要包括CLI、HiveServer、HiveWebInterface等组件
Hive Storage and Computing
包含Hive的数据存储与计算的内容,Hive元数据存储在RDBMS中,数据存储在HDFS中,计算由MR完成
7.Hive的工作流程图
8.Hive的工作流程
9.Hive的适用场景
业务场景
适用于非结构化数据的离线分析统计
Hive的优势在于处理大数据,对处理小数据没有优势
场景技术特点
为超大数据集设计的计算、扩展能力
支持SQL like查询语言
多表的join操作
支持非结构化数据的查询、计算
提供对数据存取的编程接口,支持JDBC、ODBC
1.4 Hive 存储模型与数据类型
1.Hive的存储格式
Hive中的数据
有真实数据与元数据之分,元数据是表示真实数据与Hive表的映射关系
Hive真实数据的存储格式
TEXTFILE,文本文件格式
SEQUENCEFILE,二进制序列化过的文本存储文件格式
RCFILE,面向列的数据存储格式
ORCFILE,对RCFILE的优化格式
2.Hive数据单元介绍
Databases
数据库,在HDFS中为hive.metastore.warehouse.dir目录下的一个文件夹
Tables
表,表由列构成,在表上可以进行过滤、映射、连接和联合操作,在HDFS中为数据库目录下的子目录
Hive表分为内部表和外部表
内部表类似于RDBMS中的表,由Hive管理
外部表指向已经存在HDFS中的数据,外部表的真实数据不被Hive管理
3.Hive数据单元介绍
Partitions
分区,每个表都可以按指定的键分为多个分区,作用是为了提高查询的效率,在HDFS中是表目录的子目录
Buckets
分桶,根据表中某一列的哈希值将数据分为多个桶,在HDFS最终为同一目录下根据哈希散列后的多个文件
4.Hive存储模型
Hive数据在HDFS的典型存储结构表现
/数据仓库地址/数据库名/表名/数据文件(或分桶文件)
/数据仓库地址/数据库名/表名/分区键/数据文件(或分桶文件
5.Hive的基本数据类型
整型
TINYINT、SMALLINT、INT、BIGINT
使用整数面量时,默认是INT,其他整型需要加后缀,TINYINT、SMALLINT、BIGINT后缀为Y、S、L
浮点型
FLOAT、DOUBLE、DECIMAL
文本类型
STRING、CHAR、VARCHAR
布尔及二进制
BOOLEAN(布尔值型),值为true和false
BINARY(二进制型)
时间类型
DATE,存储日期
TEMESTAMP,存储纳秒级别时间戳
ARRAY
具有相同类型变量的集合,如:[“a”,”b”]
MAP
一组键值对组合,如:{“a”:”b”,”c”:”d”}
STRUCT
封装了一组有名字的字段,其类型可以是任意基本类型
UNIONTYPE
类似于Java中的泛型,任一时刻只有其中一种类型生效
INTERVAL,存储时间间隔
6.Hive的存储格式
Hive中的数据
有真实数据与元数据之分,元数据是表示真实数据与Hive表的映射关系
Hive真实数据的存储格式
TEXTFILE,文本文件格式
SEQUENCEFILE,二进制序列化过的文本存储文件格式
RCFILE,面向列的数据存储格式
ORCFILE,对RCFILE的优化格式
1.5 Hive 库表操作
1.Hive数据库/表定义操作
2.Hive数据库/表定义操作
Hive数据表操作-创建数据表
3.Hive数据库/表定义操作
Hive数据表操作-修改数据表
4.Hive数据库/表定义操作
Hive DDL其他操作
1.6 Hive 内部与外部表
1.Hive内部表与外部表的定义
Hive 内外部表的定义、区别以及数据管理方式
2.Hive内部表
3.Hive内部表
4.Hive内部表二
Hive内部表
- Hive外部表
内外部表的使用场景
内部表被drop后,表的data和metadata都会被删除;外部表被drop后,表的metadata会被删除,但是data不会被删除。如果不小心删掉外部表,重新建表location到数据存放在HDFS的相应路径即可。
使用场景:
(1)外部表:因其指删除表时不会删除HDFS上的数据,安全性相对较高,且指定目录的特性,适合数据需要共享或者数据的处理需要 hive和其他工具一起处理的场景。
(2)内部表:对原始数据或比较重要的中间数据进行建表存储。
- Hive数据库/表操作练习
依据提供的练习素材
1.7 Hive 分区与分桶
1.Hive定义分区/分桶表
Hive创建分区表语句
2.Hive分区表/分桶表描述
Hive分区表描述回顾
分区列的值将表划分为文件夹
查询时使用“分区”列和常规列类似
查询时Hive自动过滤掉不用于提高性能的分区
Hive分桶表描述回顾
分桶是相对分区进行更细粒度的划分
根据“桶列”的哈希函数将数据进行分桶
更高的查询处理效率
3.Hive操作分区/分桶类型及设置
4.Hive操作分区
Hive操作分桶
- Hive外部表
Hive DML操作
Hive分区表/分桶表描述
Hive分区表描述回顾
分区列的值将表划分为文件夹
查询时使用“分区”列和常规列类似
查询时Hive自动过滤掉不用于提高性能的分区
Hive分桶表描述回顾
分桶是相对分区进行更细粒度的划分
根据“桶列”的哈希函数将数据进行分桶
更高的查询处理效率
Hive操作分区/分桶类型及设置
Hive操作分区
Hive操作分桶
- Hive数据库/表操作练习
依据提供的练习素材