(一)Hive 介绍

Hive 是基于 Hadoop 的数据仓库工具,提供类 SQL 查询功能,简化 MapReduce 开发。适用于快速开发、低学习成本、良好扩展性的需求。Hive 体系架构包括用户接口、跨语言服务、Driver 和元数据存储系统。数据组织涉及内部表、外部表、分区和分桶,支持多种数据类型和格式。Hive 通过 CLI、JDBC/ODBC 和 Web UI 与用户交互,并利用 Thrift 实现跨语言服务。
摘要由CSDN通过智能技术生成

前言

 

1、什么是 Hive

 
Hive
数据仓库之父比尔·恩门(Bill Inmon)在 1991 年出版的 “Building the Data Warehouse”(《建立数据仓库》)一书中所提出的定义被广泛接受——数据仓库(Data Warehouse)是一个面向主题的(Subject Oriented)、集成的(Integrated)、相对稳定的(Non-Volatile)、反映历史变化(Time Variant)的数据集合,用于支持管理决策(Decision Making Support)。

Hive 是基于 Hadoop 的一个数据仓库工具,用来进行数据提取、转化、加载,这是一种可以存储、查询和分析存储在 Hadoop 中的大规模数据的机制。Hive 数据仓库工具能将结构化的数据文件映射为一张数据库表,并提供 SQL 查询功能,能将 SQL 语句转变成 MapReduce 任务来执行。Hive 的优点是学习成本低,可以通过类似 SQL 语句实现快速 MapReduce 统计,使 MapReduce 变得更加简单,而不必开发专门的 MapReduce 应用程序。
Hive 原理
 

2、为什么使用 Hive

 
直接使用 MapReduce 所面临的问题:

  1. 人员学习成本太高
  2. 项目周期要求太短
  3. MapReduce实现复杂查询逻辑开发难度太大

为什么要使用 Hive:

  1. 更友好的接口:操作接口采用类 SQL 的语法,提供快速开发的能力
  2. 更低的学习成本:避免了写 MapReduce,减少开发人员的学习成本
  3. 更好的扩展性:可自由扩展集群规模而无需重启服务,还支持用户自定义函数
     

3、Hive 的优势和特点

 

  • 提供了一个简单的优化模型
  • HQL 类 SQL 语法,简化 MR 开发
  • 支持在不同的计算框架上运行
  • 支持在 HDFS 和 HBase 上临时查询数据
  • 支持用户自定义函数、格式
  • 成熟的 JDBC 和 ODBC 驱动程序,用于 ETL 和 BI
  • 稳定可靠(真实生产环境)的批处理
  • 有庞大活跃的社区
     

一、Hive 体系架构

 
Hive 架构
 

1、用户接口

 
CLI,Shell 终端命令行(Command Line Interface),采用交互形式使用 Hive 命令行与 Hive 进行交互,最常用(学习,调试,生产)。

JDBC/ODBC,是 Hive 的基于 JDBC 操作提供的客户端,用户(开发员,运维人员)通过其连接至 Hive Server 服务。

Web UI,通过浏览器访问 Hive。
 

2、跨语言服务

 
Thrift 是 Facebook 开发的一个软件框架,可以用来进行可扩展且跨语言的服务的开发, Hive 集成了该服务,能让不同的编程语言调用 Hive 的接口。
 

3、底层的 Driver

 
Driver 组件完成 HQL 查询语句从词法分析,语法分析,编译,优化,以及生成逻辑执行计划的生成。生成的逻辑执行计划存储在 HDFS 中,并随后由 MapReduce 调用执行。

Hive 的核心是驱动引擎, 驱动引擎由四部分组成:

(1) 解释器:解释器的作用是将 HiveSQL 语句转换为抽象语法树(AST)

(2) 编译器:编译器是将语法树编译为逻辑执行计划

(3) 优化器:优化器是对逻辑执行计划进行优化

(4) 执行器:执行器是调用底层的运行框架执行逻辑执行计划
 

4、元数据存储系统

 
元数据,通俗的讲,就是存储在 Hive 中的数据的描述信息。

Hive 中的元数据通常包括:表的名字,表的列和分区及其属性,表的属性(内部表和外部表),表的数据所在目录。

MetaStore 默认存在自带的 Derby 数据库中。缺点就是不适合多用户操作,并且数据存储目录不固定,一般只用于测试和演示。

实际生产中 MetaStore 通常存储在我们自己创建的 MySQL 数据库中。

Hive 和 MySQL 之间通过 MetaStore 服务交互。
 

执行流程

HiveQL 通过命令行或者客户端提交,经过 Compiler 编译器,运用 MetaStore 中的元数据进行类型检测和语法分析,生成一个逻辑方案(Logical Plan),然后通过的优化处理,产生 一个 MapReduce 任务。
 

二、Hive 数据组织

 

1、数据结构

 
Hive 的数据结构包括数据库、表、视图、分区和表数据等。数据库,表,分区等等都对应 HDFS 上的一个目录,表数据对应 HDFS 对应目录下的文件。

数据结构描述逻辑关系物理存储(HDFS)
Database数据库表的集合文件夹
Table行数据的集合文件夹
Partition分区用于分割数据文件夹
Buckets分桶用于分布数据文件
Row行记录文件中的行
Columns列记录每行中指定的位置
View视图逻辑概念,可跨越多张表不存储数据
Index索引记录统计数据信息文件夹

 

(1)内部表和外部表

内部表(管理表)

  • HDFS 中表现为所属数据库目录下的子文件夹
  • 数据完全由 Hive 管理,删除表(元数据)会删除数据

外部表(External Tables)

  • 数据保存在指定位置的 HDFS 路径中
  • Hive 不完全管理数据,删除表(元数据)不会删除数据

内部表和外部表的使用选择:

大多数情况,他们的区别不明显,如果数据的所有处理都在 Hive 中进行,那么倾向于 选择内部表,但是如果 Hive 和其他工具要针对相同的数据集进行处理,外部表更合适。

使用外部表访问存储在 HDFS 上的初始数据,然后通过 Hive 转换数据并存到内部表中

使用外部表的场景是针对一个数据集有多个不同的 Schema

通过外部表和内部表的区别和使用选择的对比可以看出来,Hive 其实仅仅只是对存储在 HDFS 上的数据提供了一种新的抽象。而不是管理存储在 HDFS 上的数据。所以不管创建内部表还是外部表,都可以对 Hive 表的数据存储目录中的数据进行增删操作。
 

(2)分区和分桶

分区在 HDFS 表现为一个表文件夹下的子文件夹,分桶表现为同一目录下的文件。

Hive 数据表可以根据某些字段进行分区操作,细化数据管理,可以让部分查询更快。同时表和分区也可以进一步被划分为 Buckets,分桶表的原理和 MapReduce 编程中的 HashPartitioner 的原理类似。

分区和分桶都是细化数据管理,但是分区表是手动添加区分,由于 Hive 是读模式,所以对添加进分区的数据不做模式校验,分桶表中的数据是按照某些分桶字段进行 hash 散列形成的多个文件,所以数据的准确性也高很多。
 

2、数据类型

 

(1)原始类型

类型描述示例
BOOLEAN布尔类型,TRUE/FALSETRUE
TINYINT1字节的有符号整数,-128~1271Y
SMALLINT2个字节的有符号整数,-32768~327671S
INT4个字节的有符号整数,-2147483647~21474836481
BIGINT8字节带符号整数1L
FLOAT4字节单精度浮点数1.0
DOUBLE8字节双精度浮点数3.14
STRING字符串‘hello’,“hello”
VARCHAR变长字符串,字符数范围1~65535‘abc’,“abc”
CHAR定长字符串,最大的字符数255‘ok’,“ok”
BINARY字节序列101010…
TIMESTAMP时间戳1591804800123
DATE日期‘2020-06-11 00:00:00.123’

 

(2)复杂类型

类型描述定义
ARRAY有序的的同类型数据的数组ARRAY<DATA_TYPE>
MAP键值对集合,key必须为原始类型,value可以任意类型MAP<KEY_TYPE, VALUE_TYPE>
STRUCT字段集合,类型可以不同STRUCT{FIELD_TYPE : DATA_TYPE,…}
UNIONTYPE类型联合体,可以理解为泛型UNIONTYPE<DATA_TYPE,…>

 

3、数据格式

 
Hive 中所有的数据都存储在 HDFS 中,没有专门的数据存储格式,因为 Hive 是读模式 (Schema On Read),可支持 TextFile,SequenceFile,RCFile 或者自定义格式等。只需要在创建表的时候告诉 Hive 数据中的列分隔符和行分隔符,Hive 就可以解析数据。

Hive 中默认分隔符

  • 字段:Ctrl+A或^A(\001
  • 集合:Ctrl+B或^B(\002)
  • 映射:Ctrl+C或^C(\003)
     

4、数据存储

 
Hive 的元数据存储在 RDBMS 中,除元数据外的其它所有数据都基于 HDFS 存储。默认情 况下,Hive 元数据保存在内嵌的 Derby 数据库中,只能允许一个会话连接,只适合简单的测试。实际生产环境中不适用,为了支持多用户会话,则需要一个独立的元数据库,通常使用 MySQL 作为元数据库,Hive 内部对 MySQL 提供了很好的支持。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值