Hive 介绍
Hive 是一个基于 Hadoop 的数据仓库工具,旨在简化大规模数据集的管理和分析。它将结构化数据文件映射为表,并提供类似 SQL 的查询功能。Hive 的数据存储在 Hadoop 分布式文件系统(HDFS)中,使用 Hive 查询语言(HQL)进行数据处理。
1. Hive 的本质: HQL转化为MapReduce
- 数据存储:Hive 的数据存储在 HDFS 中。
- 底层实现:Hive 通过 MapReduce 框架处理数据,适合大数据量的分析任务。
- 执行延迟:Hive 的执行延迟较高,适合于对实时性要求不高的数据分析场景。
2. Hive 的优点
- 简单易用:采用类 SQL 语法,快速开发能力强。
- 低学习成本:避免手动编写 MapReduce 程序,减少开发人员的学习成本。
- 大数据处理:优势在于处理大规模数据,对于小数据量没有明显优势。
- 自定义扩展:支持用户自定义函数,能够满足特定需求。
3. Hive 和关系型数据库的比较
尽管 Hive 采用了类似 SQL 的查询语言 HQL,使得它在表面上看起来像一个数据库,但实际上,Hive 和数据库除了拥有类似的查询语言,再无类似之处,数据库可以用在 Online 的应用中,但是Hive 是为数据仓库而设计的工具。
特性 | Hive | 关系型数据库(如 Oracle,Mysql) |
---|---|---|
存储 | HDFS 分布式文件存储系统 | 服务器本地的文件系统(如 DBF) |
计算 | MapReduce | 专用的计算执行引擎 |
时间 | 高延迟 | 低延迟 |
数据量 | 适用于 PB/TB 级别的大数据 | 通常处理 GB 级别的数据 |
主键 | 不支持主键 | 支持主键 |
索引 | 高版本才有位图索引,索引支持有限 | 有丰富的索引支持 |
可扩展性 | 与 Hadoop 的可扩展性一致,支持大规模集群 | 由于 ACID 语义的限制,扩展性有限 |
数据规模 | 支持大规模数据的并行计算 | 支持的数据规模相对较小 |
-
查询语言:Hive 提供了针对其特性设计的类 SQL 查询语言 HQL,熟悉 SQL 的开发者可以快速上手。
-
数据存储位置:Hive 的数据都存储在 HDFS 中,而关系型数据库则可以保存在本地文件系统或块设备中。
-
数据更新:Hive 主要用于读多写少的场景,不建议频繁更新数据,而关系型数据库的设计则支持频繁的 CRUD 操作。
-
索引:Hive 在数据加载过程中不会自动创建索引,因此查询时可能需要全表扫描,这会导致较高的延迟。相对而言,关系型数据库通常会为重要字段创建索引,查询效率较高。
-
执行:Hive 查询通过 Hadoop 的 MapReduce 来实现,而关系型数据库则通常有自己的执行引擎,处理速度更快。
-
执行延迟:由于缺乏索引和使用 MapReduce,Hive 的查询延迟较高,因此不适合在线实时查询。
-
可扩展性:Hive 的可扩展性与 Hadoop 一致,能够在集群上水平扩展,支持大规模数据的处理。而传统关系型数据库在 ACID 语义的严格限制下,扩展性相对有限。
-
数据规模:Hive 利用 MapReduce 进行并行计算,能够支持 PB/TB 级别的数据规模。相比之下,关系型数据库的处理能力通常较小,适合 GB 级别的数据。
-
应用场景:Hive 是为数据仓库设计的,适用于数据分析和批处理,而关系型数据库更适合在线事务处理(OLTP)和实时数据查询。
4. Hive 的元数据存储
元数据是描述数据的数据,Hive 需要有一个地方来存储元数据,它包括以下内容:
- 数据库的名称
- 表的名称
- 表的列名
- 表的类型
- 列的类型
- 表的数据在 HDFS 上的位置
为了管理这些元数据,Hive 一般使用 关系型数据库如MySQL 作为存储后端。
相关操作
1. 登录 MySQL 数据库
在命令行中使用以下命令登录到 MySQL:
mysql -h 127.0.0.1 -u root -p123456
这里,-h
指定主机地址,-u
指定用户名,-p
后跟密码。
2. 查看 MySQL 中的数据库
登录后,可以显示 MySQL 中现有的数据库:
SHOW DATABASES;
会看到多个数据库,其中有一个名为 hive
的数据库,用来存储 Hive 的元数据。
3. 切换到 Hive 数据库
使用以下命令切换到 hive
数据库:
USE hive;