开启掘金成长之旅!这是我参与「掘金日新计划 · 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 的对比
总结:Hive 具有 SQL 数据库的外表,但应用场景完全不同,Hive 只适合用来做海量离线数据统计分析,也就是数据仓库工具。
1.3 Hive 的架构
基本组成 一、用户接口
1、CLI,Shell 终端命令行(Command Line Interface),采用交互形式使用 hive 命令行与 hive 进行交互,最常用(学习,调试,生产)
2、JDBC/ODBC,是 Hive 的基于 JDBC 操作提供的客户端,用户(开发员,运维人员)通过 这连接至 Hive server 服务
3、Web 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 表
声明:
文章中代码为自己根据相应理解编写,文章中出现的相关图片为自己实践中的截图和相关技术对应的图片,若有相关异议,请联系删除。感谢。转载请注明出处,感谢。
落叶飘雪