Hive系列之Hive基本概念

178 阅读6分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第4天,点击查看活动详情

Hive系列之Hive基本概念

第一章 Hive 概念

1.1 Hive 简介

1.1.1 什么是 Hive

Hive 由 Facebook 实现并开源,是基于 Hadoop 的一个数据仓库工具,可以将结构化的数据 映射为一张数据库表,并提供 HQL(Hive QL)查询功能,底层数据是存储在 HDFS 上。Hive 的本质是将 HQL 语句转换为 MapReduce 任务运行,使不熟悉 MapReduce 的用户很方便地利 用 HQL 处理和计算 HDFS 上的结构化的数据,适用于离线的批量数据计算。

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

Hive 依赖于 HDFS 存储数据,Hive 将 HQL 转换成 MapReduce 执行。

所以说 Hive 是基于 Hadoop 的一个数据仓库工具,实质就是一款基于 HDFS 的 MapReduce 计算框架,对存储在 HDFS 中的数据进行分析和管理 。

OLAP:Online Analytical Processing   联机分析处理(查询)
OLTP:Online Transaction Processing  联机事务处理(增删改)

1.1.2 为什么使用 Hive

使用 MapReduce 所面临的问题:

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

为什么要使用 Hive:

更友好的接口:操作接口采用类 SQL 的语法,提供快速开发的能力
更低的学习成本:避免了写 MapReduce,减少开发人员的学习成本
更好的扩展性:延展性,Hive 支持自定义函数,用户可以根据自己的需求来实现自己的函数

1.1.3 Hive 特点

优点

1、延展性,Hive 支持自定义函数,用户可以根据自己的需求来实现自己的函数
2、操作接口采用类 SQL 的语法,提供快速开发的能力
3、避免了写 MapReduce,减少开发人员的学习成本

缺点:

1、Hive 不支持记录级别的增删改操作,但是用户可以通过查询生成新表或者将查询结果导入到文件中
2、Hive 的查询延时严重,因为 MapReduce的启动过程消耗很长时间,所以不能用在交互查询系统中。 
3、Hive 不支持事务(因为不没有增删改,所以主要用来做 OLAP(Online Analytical Processing 联机分析处理,查询),而不是 OLTP(Online Transaction Processing 联机事务处理,增删改),这就是数据处理的两大级别)

1.2 Hive 和 RDBMS 的对比

image-20200802004202686.png

总结:Hive 具有 SQL 数据库的外表,但应用场景完全不同,Hive 只适合用来做海量离线数据统计分析,也就是数据仓库工具。

1.3 Hive 的架构

image-20200802004811960.png

基本组成 一、用户接口

1CLI,Shell 终端命令行(Command Line Interface),采用交互形式使用 hive 命令行与 hive 进行交互,最常用(学习,调试,生产)
2JDBC/ODBC,是 Hive 的基于 JDBC 操作提供的客户端,用户(开发员,运维人员)通过 这连接至 Hive server 服务
3Web UI,通过浏览器访问 Hive

二、Thrift Server

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

三、元数据存储

元数据:描述数据的数据

元数据:描述数据的数据,通俗的讲,就是描述存储在 Hive 中的真实数据的信息。 
Hive 中的元数据通常包括:数据库名,表的名字,表的列和分区及其属性,表的属性(内部表和外部表),表的数据所在目录 等等
​
Metastore 默认存在自带的 Derby 数据库中。缺点就是不适合多用户操作,并且数据存储目录不固定。数据库跟着 Hive 走,极度不方便管理  
解决方案:通常存我们自己创建的 MySQL 库(本地 或 远程)  
Hive 和 MySQL 之间通过 MetaStore 服务交互 

四、Driver:编译器(Compiler),优化器(Optimizer),执行器(Executor)

Driver 组件完成 HQL 查询语句从词法分析,语法分析,编译,优化,以及生成逻辑执行计划的生成。生成的逻辑执行计划存储在 HDFS 中,并随后由 MapReduce 调用执行 
Hive 的核心是驱动引擎, 驱动引擎由四部分组成: 
(1) 解释器(SQL Parser):解释器的作用是将 Hive QL 语句转换为抽象语法树(AST) 
(2) 编译器(Compiler):编译器是将语法树编译为逻辑执行计划 
(3) 优化器(Query Optimizer):优化器是对逻辑执行计划进行优化 
(4) 执行器(Executor):执行器是调用底层的运行框架执行逻辑执行计划 

五、执行流程

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

1.4 Hive 的数据存储

1、Hive 的存储结构包括 数据库、表、视图、分区 和分桶、表数据等。
    数据库,表,分区 等都对应 HDFS 上的一个目录。
    分桶、表数据对应 HDFS 上面相应的目录下的文件。 
​
2、Hive 中所有的数据都存储在 HDFS 中。
​
3、只需要在创建表的时候告诉 Hive 数据中的列分隔符和行分隔符,Hive 就可以解析数据 
    Hive 的默认列分隔符:控制符 Ctrl + A,\x01 
    Hive 的默认行分隔符:换行符 \n 
​
4、Hive 中包含以下数据模型: 
    database:在 HDFS 中表现为${hive.metastore.warehouse.dir}目录下一个文件夹 
    table:在 HDFS 中表现所属 database 目录下一个文件夹 
    external table:与 table 类似,不过其数据存放位置可以指定任意 HDFS 目录路径 
    partition:在 HDFS 中表现为 table 目录下的子目录 
    bucket:在 HDFS 中表现为同一个表目录或者分区目录下根据某个字段的值进行 hash 散列之后的多个文件
    view:与传统数据库类似,只读,基于基本表创建 
​
5、Hive 的元数据存储在 RDBMS 中,除元数据外的其它所有数据都基于 HDFS 存储。
    默认情况下,Hive 元数据保存在内嵌的 Derby 数据库中,只能允许一个会话连接,只适合简单的测试,实际生产环境中不适用。
    为了支持多用户会话,则需要一个独立的元数据库,使用 MySQL 作为元数据库,Hive 内部对 MySQL 提供了很好的支持。 
​
6、Hive 中的表分为 内部表、外部表、分区表和 Bucket 表 


声明:
        文章中代码为自己根据相应理解编写,文章中出现的相关图片为自己实践中的截图和相关技术对应的图片,若有相关异议,请联系删除。感谢。转载请注明出处,感谢。

        落叶飘雪