Hive

Hive

数据仓库

数据仓库,面相分析的集成化数据环境,分析结果为企业提供决策支持(Decision Support)。

数据仓库本身并不生产任何数据,其数据来源于不同外部系统。

不需要消费任何数据,其结果开放给各个外部应用使用。

基于业务数据开展数据分析,基于分析的结果给决策提供支持。

OLTP系统(mysql、oracle)核心是面向业务、支持业务、支持事务,可以分为读写。一般来说读的压力比较大。所以如果直接在OLTP系统上面展开分析,会让读取压力倍增。

所以说,如果数据规模比较小,在业务低峰期可以在OLTP系统上开展直接分析。但是为了更好的进行各种规模的数据分析,同时也不影响OLTP系统运行,此时需要构建一个集成统一的数据分析平台。该平台:面向分析、支持分析,并且和OLTP系统解耦合。

Screenshot2023-07-15at17.42.36

四个特征

面向主题

集成性(ETL,抽取、转换、加载)

非易变性

时变性(数据是按照时间顺序追加的,都带有时间属性)

OLTP系统和OLAP系统

联机事务处理,OLTP(Online Transaction Processing):保证响应时间、安全等等。

联机分析处理。OLAP(Online Analytical Processing):一个典型事例就是数据仓库。

Screenshot2023-07-15at17.53.44

数据仓库和数据库区别

一个是OLAP(面向分析),一个是OLTP(面向分析)。

OLTP典型是RDBMS,当然此处强调关系型数据库。

OLAP核心在于DW,俗称的数据仓库。

数据仓库不是大型的数据库,虽然数据仓库存储数据规模大。

数据库是面向事务的设计,数据仓库是面向主题设计。

数据库一般存储业务数据,数据仓库一般存储历史数据。

数据库捕获数据,数据仓库分析数据。

数据仓库和数据集市

数据仓库是 面向整个集团组织的数据,数据集市面向单个部门使用。

数据集市叫做小型数据仓库,是数据仓库的一个子集。

数据仓库分层架构

Screenshot2023-07-15at18.02.43

ODS层:原数据层、数据引入层、数据暂存层。

DW层:数据仓库层。

DA层:数据应用层,面向业务定制提供给产品和数据分析使用的数据。

ETL和ELT区别

Screenshot2023-07-15at18.18.17

在数仓的分层架构中,ETL是什么动作?

从各个数据源获取数据及在数据仓库内的流转和流动。(ETL)

ELT的话直接E获取到数据仓库,没有ODS,然后数据转化根据不同的需要进行不同的转换等。

美团点评酒旅数仓建设实践

![Screenshot2023-07-15at18.19.04](https://gitee.com/JiaChengCC/u-pic-chart-bed/raw/master/uPic/Screenshot 2023-07-15 at 18.19.04.png)

Screenshot2023-07-15at18.20.59

Screenshot2023-07-15at18.25.55

Apache Hive

  • 是一款建立在Hadoop之上的开源数据仓库系统,可以讲存储在Hadoop文件(HDFS)中的结构化、半结构化数据文件映射为一张数据库表,基于表提供了一种类似SQL的查询,称为Hive查询语言(HQL),用于访问和分析存储在Hadoop文件中的大型数据集。

  • Hive核心是将HQL转换为MqpReduce程序,然后将程序提交到Hadoop群集执行。

  • Hive由Facebook实现并开源。

直接使用hadoop处理数据学习成本太高,需要Java语言,实现复杂查询逻辑开发难度太大。

Hive好处,操作接口采用类似SQL语法,提供快速开发的能力;避免直接写MapReduce,减少开发人员的学习成本;支持自定义函数,功能扩展方便;背靠Hadoop,擅长存储分析海量数据集。

![Screenshot2023-07-15at18.34.28](https://gitee.com/JiaChengCC/u-pic-chart-bed/raw/master/uPic/Screenshot 2023-07-15 at 18.34.28.png)

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

Hive让用户专注于编写HQL,Hive帮助转换成MapReduce程序完成对数据的分析。

元数据(Hive Metadata、存储在关系型数据库)

描述数据的数据。

1、Hive能将数据文件映射称为一张表,映射指的是什么?文件和表之间的对应关系。

在Hive中能写sql处理的前提是针对表,而不是针对文件,因此需要将文件和表之间的对应关系描述记录清楚,映射信息专业的叫法称之为元数据信息。(元数据是指用来描述数据的数据)

元数据信息包括:用Hive创建的database、table、表的位置、类型、属性、字段顺序类型、分隔符等源信息。

Metastore

元数据服务,管理metadata元数据。对外暴露服务地址,让客户端连接,再由metastore连接mysql数据库存取元数据。

Metqstore三种配置方式:内嵌模式、本地模式、远程模式

Screenshot2023-07-16at19.48.23

内嵌模式:服务嵌入在主HiveServer进程中。但是一次只能支持一个活动用户,适用于测试体验,不适用于生产环境。

本地模式:缺点是每次启动一次hive服务,都内置启动了一个metastore。

2、Hive软件本身承担了什么功能职责?SQL语法解析编译成为MapReduce。

最终案例(模拟实现Hive功能)

Screenshot2023-07-16at19.00.41

Apache Hive架构、组件

  • 用户接口(访问Hive的方式)
  • 元数据存储
  • Driver驱动程序,包括语法解析器、计划编译器、优化器、执行器
  • 执行引擎(默认是MapReduce、Tez、Spark3)

Screenshot2023-07-16at19.07.52

Apache数据模型(库、表、分区、分桶)

Hive的数据默认存储在HDFS上,默认有一个子目录。因此Hive的数据库在HDFS上面的存储路径为:${hive.metastore.warehouse.dir}/databasename.db()。比如名为itcast的数据库的存储路径为:/user/hive/warehouse/itcast。

${hive.metastore.warehouse.dir}是一个参数,默认为/user/hive/warehouse。

Hive表与关系数据库中的表相同。Hive中的表对应的数据通常存储在HDFS中,而表相关的元数据是存储在RDBMS中。

Bucket分桶表在HDFS中表现为同一个表目录下数据根据hash三列之后变成多个文件。

分桶的好处是可以优化join的查询和方便抽样查询。

Hive与MySql区别

应用场景不同。Hive只适合使用做海量数据的离线分析。Hive的定位是数据仓库,面相分析的OLAP系统。

Hive不是大型数据库,也不是要取代MySQL承担业务数据处理。

Screenshot2023-07-16at19.27.54

Apache Hive安装部署

1、首先安装Hadoop。

Hive不是分布式安装运行的软件,其分布式的特性主要借由Hadoop完成。包括分布式存储、分布式计算。

2、然后Hadoop与Hive整合。

Screenshot2023-07-16at20.00.31

3、然后就是三种对应的metastore配置对应的安装。(内嵌模式、本地模式(需要mysql)、远程模式(安装mysql以及手动单独配置启动Metastore))

Hive命令行客户端

Screenshot2023-07-16at20.46.28

Hive两代客户端

第一代是$HIVE_HOME/bin/hive。

第二代是$HIVE_HOME/bin/beeline,是一个JDBC客户端,和第一代相比性能加强、安全性提高。

Screenshot2023-07-16at20.51.08

所以如果需要使用beeline客户端,需要先启动metastore服务,然后启动hiveserver2服务(要等一段时间)。然后就可以客户端命令行连接hiveserver2。

Hive使用与Mysql有啥区别

Hive插入速度极慢(因为底层通过MapReduce执行),sql执行时间长。

Hive应该具有自己特有的数据插入表方式,结构化文件映射成为

指定分隔符和字段顺序。

1
2
create table t_user1 (id int, name varchar (255) , age int)
row format delimited fields terminated by ',';

然后把txt文件放到hadoop对应的数据表目录下面。

使用Hive展开小数据分析会怎样?

一个select,5个数据的数据表,执行了46s[Facepalm]。因为使用MR执行引擎来处理数据。

而如果是大数据集,使用Hive进行分析,底层MR分布式计算,秒杀mysql。

数据定义语言(DDL)

Hive SQL DDL建表基础语法

Hive SQL DDL建表高阶语法

Hive SQL DDL其他语法

Hive Show语法

DDL核心语法由CREATEALTERDROP三个组成。DDL并不涉及表内部数据的操作。

Screenshot2023-07-17at20.18.36

Hive数据类型

1、原生数据类型:数值 、时间日期、字符串 、杂项数据类型。

2、复杂数据类型:array数组、map映射、struct结构、union联合体。

Screenshot2023-07-17at20.23.18

注意事项:

  • Hive SQL中,数据类型英文字母大小写不敏感;
  • 除了SQL数据类型,还支持Java数据类型,比如字符串string;
  • 复杂数据类型的使用通常需要和分隔符指定语法配合使用;
  • 如果定义的数据类型和文件不一致,Hive会尝试隐式转换,但是不保证成功。

隐式转换,只能原生类型 从 窄类型 到 宽类型。

Screenshot2023-07-17at20.26.44

显示转换,(比如字符串转数字,(‘100’ as INT)),如果强制转换失败,那么会返回NULL。

Hive读写文件机制(SerDe)

序列化(对象转换为字节码)和反序列化(字节码转换为对象)。

Screenshot2023-07-17at20.35.14

1
[ROW FORMAT DELIMITED | SERDE]

Hive 默认分隔符

默认的分隔符是“\001”。

建表的时候指定存储路径

1
LOCATION hdfs_path

Hive建表练习

Screenshot2023-07-17at21.04.08

Screenshot2023-07-17at21.10.42

P42

Author: Jcwang

Permalink: http://example.com/2023/07/15/Hive/