Hive 是一个建立在 Hadoop 之上的数据仓库系统,最初由 Facebook 开发,后来成为 Apache 软件基金会的一部分。它提供了类似于 SQL 的查询语言 HiveQL,使得用户可以方便地在 Hadoop 分布式文件系统(HDFS)中执行数据查询和分析操作。Hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张表,并提供类SQL查询功能。
那为什么会有Hive呢?它是为了解决什么问题而诞生的呢?
下面通过一个案例,来快速了解一下Hive。
(1)在Hadoop用MapReduce程序实现的,当时需要写Mapper、Reducer和Driver三个类,并实现对应逻辑,相对繁琐。
test表
id列
aa a aaa b
(2)如果通过Hive SQL实现,一行就搞定了,简单方便,容易理解。
select count(*) from test group by id;
Hive 的本质是将 Hadoop 生态系统中的 MapReduce
编程模型与 SQL
查询语言相结合,从而提供了一种在大数据环境下进行数据仓库操作的解决方案。
Hive 的主要目标是提供一个数据仓库解决方案,使得用户可以在 Hadoop 分布式文件系统(HDFS)中存储大规模的结构化数据,并通过类似于 SQL 的查询语言来进行数据分析和处理。
Hive 提供了 HiveQL,一种类似于 SQL 的查询语言,使得用户可以使用熟悉的 SQL 语法来查询和操作数据。这种 SQL 接口让那些熟悉传统数据库系统的用户能够轻松地迁移到 Hive 平台上进行数据处理。
当用户提交 HiveQL 查询时,Hive 的 Driver 将会将其转换成一系列的 MapReduce 作业或 Tez 任务来执行。这些作业或任务在 Hadoop 集群上运行,并利用分布式计算资源来处理大规模数据集。
Hive 使用 Metastore 来管理表的元数据信息,包括表的结构、分区信息等。这些元数据通常存储在关系型数据库中,例如 MySQL 或 PostgreSQL。Metastore 的存在使得用户可以轻松地管理和查询表的元数据信息。
除了内部表(Managed Table)外,Hive 还支持外部表(External Table),这些表的数据存储在外部文件系统(如 HDFS)中,由用户自行管理。这种外部存储的支持使得用户可以更灵活地管理数据,并与其他系统进行集成。
作为 Hadoop 生态系统的一部分,Hive 具有良好的扩展性,并与其他组件(如 HDFS、YARN、HBase、Spark 等)紧密整合,使得用户可以在一个统一的平台上进行数据存储、处理和分析。
Tips:
Hive是一个Hadoop客户端,用于将HQL(Hive SQL)转化成MapReduce程序。
(1)Hive中每张表的数据存储在HDFS
(2)Hive分析数据底层的实现是MapReduce(也可配置为Spark或者Tez)
(3)执行程序运行在Yarn上