Hive
数据仓库
数据仓库,面相分析的集成化数据环境,分析结果为企业提供决策支持(Decision Support)。
数据仓库本身并不生产任何数据,其数据来源于不同外部系统。
不需要消费任何数据,其结果开放给各个外部应用使用。
基于业务数据开展数据分析,基于分析的结果给决策提供支持。
OLTP系统(mysql、oracle)核心是面向业务、支持业务、支持事务,可以分为读写。一般来说读的压力比较大。所以如果直接在OLTP系统上面展开分析,会让读取压力倍增。
所以说,如果数据规模比较小,在业务低峰期可以在OLTP系统上开展直接分析。但是为了更好的进行各种规模的数据分析,同时也不影响OLTP系统运行,此时需要构建一个集成统一的数据分析平台。该平台:面向分析、支持分析,并且和OLTP系统解耦合。
四个特征
面向主题
集成性(ETL,抽取、转换、加载)
非易变性
时变性(数据是按照时间顺序追加的,都带有时间属性)
OLTP系统和OLAP系统
联机事务处理,OLTP(Online Transaction Processing):保证响应时间、安全等等。
联机分析处理。OLAP(Online Analytical Processing):一个典型事例就是数据仓库。
数据仓库和数据库区别
一个是OLAP(面向分析),一个是OLTP(面向分析)。
OLTP典型是RDBMS,当然此处强调关系型数据库。
OLAP核心在于DW,俗称的数据仓库。
数据仓库不是大型的数据库,虽然数据仓库存储数据规模大。
数据库是面向事务的设计,数据仓库是面向主题设计。
数据库一般存储业务数据,数据仓库一般存储历史数据。
数据库捕获数据,数据仓库分析数据。
数据仓库和数据集市
数据仓库是 面向整个集团组织的数据,数据集市面向单个部门使用。
数据集市叫做小型数据仓库,是数据仓库的一个子集。
数据仓库分层架构
ODS层:原数据层、数据引入层、数据暂存层。
DW层:数据仓库层。
DA层:数据应用层,面向业务定制提供给产品和数据分析使用的数据。
ETL和ELT区别
在数仓的分层架构中,ETL是什么动作?
从各个数据源获取数据及在数据仓库内的流转和流动。(ETL)
ELT的话直接E获取到数据仓库,没有ODS,然后数据转化根据不同的需要进行不同的转换等。
美团点评酒旅数仓建设实践

Apache Hive
是一款建立在Hadoop之上的开源数据仓库系统,可以讲存储在Hadoop文件(HDFS)中的结构化、半结构化数据文件映射为一张数据库表,基于表提供了一种类似SQL的查询,称为Hive查询语言(HQL),用于访问和分析存储在Hadoop文件中的大型数据集。
Hive核心是将HQL转换为MqpReduce程序,然后将程序提交到Hadoop群集执行。
Hive由Facebook实现并开源。
直接使用hadoop处理数据学习成本太高,需要Java语言,实现复杂查询逻辑开发难度太大。
Hive好处,操作接口采用类似SQL语法,提供快速开发的能力;避免直接写MapReduce,减少开发人员的学习成本;支持自定义函数,功能扩展方便;背靠Hadoop,擅长存储分析海量数据集。

Hive利用HDFS存储数据,利用MapReduce查询分析数据。
Hive让用户专注于编写HQL,Hive帮助转换成MapReduce程序完成对数据的分析。
元数据(Hive Metadata、存储在关系型数据库)
描述数据的数据。
1、Hive能将数据文件映射称为一张表,映射指的是什么?文件和表之间的对应关系。
在Hive中能写sql处理的前提是针对表,而不是针对文件,因此需要将文件和表之间的对应关系描述记录清楚,映射信息专业的叫法称之为元数据信息。(元数据是指用来描述数据的数据)
元数据信息包括:用Hive创建的database、table、表的位置、类型、属性、字段顺序类型、分隔符等源信息。
Metastore
元数据服务,管理metadata元数据。对外暴露服务地址,让客户端连接,再由metastore连接mysql数据库存取元数据。
Metqstore三种配置方式:内嵌模式、本地模式、远程模式
内嵌模式:服务嵌入在主HiveServer进程中。但是一次只能支持一个活动用户,适用于测试体验,不适用于生产环境。
本地模式:缺点是每次启动一次hive服务,都内置启动了一个metastore。
2、Hive软件本身承担了什么功能职责?SQL语法解析编译成为MapReduce。
最终案例(模拟实现Hive功能)
Apache Hive架构、组件
- 用户接口(访问Hive的方式)
- 元数据存储
- Driver驱动程序,包括语法解析器、计划编译器、优化器、执行器
- 执行引擎(默认是MapReduce、Tez、Spark3)
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承担业务数据处理。
Apache Hive安装部署
1、首先安装Hadoop。
Hive不是分布式安装运行的软件,其分布式的特性主要借由Hadoop完成。包括分布式存储、分布式计算。
2、然后Hadoop与Hive整合。
3、然后就是三种对应的metastore配置对应的安装。(内嵌模式、本地模式(需要mysql)、远程模式(安装mysql以及手动单独配置启动Metastore))
Hive命令行客户端
Hive两代客户端
第一代是$HIVE_HOME/bin/hive。
第二代是$HIVE_HOME/bin/beeline,是一个JDBC客户端,和第一代相比性能加强、安全性提高。
所以如果需要使用beeline客户端,需要先启动metastore服务,然后启动hiveserver2服务(要等一段时间)。然后就可以客户端命令行连接hiveserver2。
Hive使用与Mysql有啥区别
Hive插入速度极慢(因为底层通过MapReduce执行),sql执行时间长。
Hive应该具有自己特有的数据插入表方式,结构化文件映射成为表。
指定分隔符和字段顺序。
1 | create table t_user1 (id int, name varchar (255) , age int) |
然后把txt文件放到hadoop对应的数据表目录下面。
使用Hive展开小数据分析会怎样?
一个select,5个数据的数据表,执行了46s[Facepalm]。因为使用MR执行引擎来处理数据。
而如果是大数据集,使用Hive进行分析,底层MR分布式计算,秒杀mysql。
数据定义语言(DDL)
Hive SQL DDL建表基础语法
Hive SQL DDL建表高阶语法
Hive SQL DDL其他语法
Hive Show语法
DDL核心语法由CREATE、ALTER和DROP三个组成。DDL并不涉及表内部数据的操作。
Hive数据类型
1、原生数据类型:数值 、时间日期、字符串 、杂项数据类型。
2、复杂数据类型:array数组、map映射、struct结构、union联合体。
注意事项:
- Hive SQL中,数据类型英文字母大小写不敏感;
- 除了SQL数据类型,还支持Java数据类型,比如字符串string;
- 复杂数据类型的使用通常需要和分隔符指定语法配合使用;
- 如果定义的数据类型和文件不一致,Hive会尝试隐式转换,但是不保证成功。
隐式转换,只能原生类型 从 窄类型 到 宽类型。
显示转换,(比如字符串转数字,(‘100’ as INT)),如果强制转换失败,那么会返回NULL。
Hive读写文件机制(SerDe)
序列化(对象转换为字节码)和反序列化(字节码转换为对象)。
1 | [ROW FORMAT DELIMITED | SERDE] |
Hive 默认分隔符
默认的分隔符是“\001”。
建表的时候指定存储路径
1 | LOCATION hdfs_path |
Hive建表练习
P42
Author: Jcwang
Permalink: http://example.com/2023/07/15/Hive/