HIVE 与 Hadoop 的关系

1.关系

Apache Hive 是一款建立在 Hadoop 之上的开源数据仓库系统,可以将存储在 Hadoop 文件中的结构化、半结构化数据文件映射为一张数据库表,基于表提供了一种类似 SQL 的查询模型,称为 Hive 查询语言(HQL),用于访问和分析存储在 Hadoop 文件中的大型数据集。Hive 核心是将 HQL 转换为 MapReduce 程序,然后将程序提交到 Hadoop 群集执行。

2.为什么使用 Hive

➢ 使用 Hadoop MapReduce 直接处理数据所面临的问题
人员学习成本太高 需要掌握 java 语言
MapReduce 实现复杂查询逻辑开发难度太大
➢ 使用 Hive 处理数据的好处
操作接口采用类 SQL 语法,提供快速开发的能力(简单、容易上手)
避免直接写 MapReduce,减少开发人员的学习成本
支持自定义函数,功能扩展很方便
背靠 Hadoop,擅长存储分析海量数据集

3.关系图

image.png

4.Hive架构、组件

image.png

用户接口:包括 CLI、JDBC/ODBC、WebGUI。其中,CLI(command lineinterface)为 shell 命令行;Hive 中的 Thrift 服务器允许外部客户端通过网络与 Hive 进行交互,类似于 JDBC 或 ODBC 协议。WebGUI 是通过浏览器访问 Hive。元数据存储:通常是存储在关系数据库如 mysql/derby 中。Hive 中的元数据包括表的名字,表的列和分区及其属性,表的属性(是否为外部表等),表的数据所在目录等。Driver 驱动程序, , 包括 语法解析、 器、 计划 编译器、优化器、执行器:完成 HQL查询语句从词法分析、语法分析、编译、优化以及查询计划的生成。生成的查询计划存储在 HDFS 中,并在随后有执行引擎调用执行。执行引擎:Hive 本身并不直接处理数据文件。而是通过执行引擎处理。当下Hive 支持 MapReduce、Tez、Spark3 种执行引擎。

5、Hive 数据模型 (Data Model )

数据模型:用来描述数据、组织数据和对数据进行操作,是对现实世界数据特征的描述。Hive 的数据模型类似于 RDBMS 库表结构,此外还有自己特有模型。Hive 中的数据可以在粒度级别上分为三类:
Table 表
Partition 分区
Bucket 分桶


image.png

5.1 Databases

Hive 作为一个数据仓库,在结构上积极向传统数据库看齐,也分数据库(Schema),每个数据库下面有各自的表组成。默认数据库 default。Hive 的数据都是存储在 HDFS 上的,默认有一个根目录,在 hive-site.xml中 , 由 参 数 hive.metastore.warehouse.dir 指 定 。 默 认 值 为/user/hive/warehouse。因此,Hive 中的数据库在 HDFS 上的存储路径为:${hive.metastore.warehouse.dir}/databasename.db比如,名为 itcast 的数据库存储路径为:/user/hive/warehouse/itcast.db

5.2 Tables

Hive 表与关系数据库中的表相同。Hive 中的表所对应的数据是存储在Hadoop 的文件系统中,而表相关的元数据是存储在 RDBMS 中。
在 Hadoop 中,数据通常驻留在 HDFS 中,尽管它可以驻留在任何 Hadoop 文件系统中,包括本地文件系统或 S3。Hive 有两种类型的表:
⚫ Managed Table 内部表、托管表
⚫ External Table 外部表
创建表时,默是内部表。关于内部表和外部表的区别,我们后续知识点再做展开探讨。Hive 中的表的数据在 HDFS 上的存储路径为:
${hive.metastore.warehouse.dir}/databasename.db/tablename
比如,itcast 的数据库下 t_user 表存储路径为:
/user/hive/warehouse/itcast.db/t_user


image.png

5.3 Partitions

Partition 分区是 hive 的一种优化手段表。 分区是指根据分区列(例如“日期 day ”)的值将表划分为不同分区。这样可以更快地对指定分区数据进行查询。分区在存储层面上的表现是:table 表目录下以子文件夹形式存在。一个文件夹表示一个分区。子文件命名标准: 分区列= = 分区值Hive 还支持分区下继续创建分区,所谓的多重分区。关于分区表的使用和详细介绍,后面模块会单独展开详细讲解。
<meta name="source" content="lake">

5.4 Buckets

Bucket 分桶表是 hive 的一种优化手段表。 分桶 是指根据段 表中字段 (例如“ 编号 ID ”)的值, , 经过 h hash 计算规则将数据文件划分成指定的若干个小文件。

image.png

分桶规则:hashfunc(ID) % 桶个数,余数相同的分到同一个文件。分桶的好处是可以优化 join 查询和方便抽样查询。Bucket 分桶表在 hdfs

中表现为同一个表目录下数据根据 hash 散列之后变成多个文件。关于桶表以及分桶操作,后面模块会单独展开详细讲解。

image.png

6.Hive 是要取代 Mysql 吗?

Hive 虽然具有 RDBMS 数据库的外表,包括数据模型、SQL 语法都十分相似,但应用场景却完全不同。Hive 只适合用来做海量数据的离线分析。Hive 的定位是数据仓库,面向分析的 OLAP 系统。因此时刻告诉自己,Hive 不是大型数据库,也不是要取代 Mysql 承担业务数据处理。更直观的对比请看下面这幅图:


image.png

HIVE 中原始数据放在HFDS上面,元数据(表数据)保存在MySQL上。
HFDS默认地址是:/user/hive/warehouse/
使用如下命令把生成的测试数据先上传到 HDFS 中,其中 {hdfspath} 为 HDFS 上的您存放文件的路径: hdfs dfs -put ./hive_test.data /{hdfspath}
也可以使用 COS 上面的数据。将数据上传到 COS 中,如果数据在本地,那么可以使用 COS 控制台来上传数据。如果数据在 EMR 集群,那么使用如下命令来上传数据,其中 {bucketname} 为您创建的 COS 桶名: hdfs dfs -put ./hive_test.data cosn://{bucketname}/

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容