什么是Hive? Archi结构与模式
什么是Hive?
Hive 是一个基于 Hadoop 分布式文件系统 (HDFS) 开发的 ETL 和数据仓库工具。Hive 可以轻松执行以下操作:
- 数据封装
- 临时查询
- 海量数据集分析
Hive 的重要特性
- 在 Hive 中,首先创建表和数据库,然后将数据加载到这些表中。
- Hive 作为数据仓库,旨在管理和查询存储在表中的结构化数据。
- 在处理结构化数据时,Map Reduce 不具备 UDF 那样的优化和可用性功能,但 Hive 框架却具备。查询优化是指在性能方面有效的查询执行方式。
- Hive 的 SQL 语言将用户从 Map Reduce 编程的复杂性中解放出来。它重用了关系数据库世界中熟悉的概念,例如表、行、列和模式等,以便于学习。
- Hadoop 的编程工作基于平面文件。因此,Hive 可以使用目录结构来“分区”数据,以提高某些查询的性能。
- Hive 的一个新且重要的组件,即用于存储架构信息的 Metastore。此 Metastore 通常位于关系数据库中。我们可以使用以下方法与 Hive 交互
- Web图形用户界面
- Java 数据库连接 (JDBC) 接口
- 大多数交互往往通过命令行界面 (CLI) 进行。Hive 提供了一个 CLI,可使用 Hive 查询语言 (HQL) 编写 Hive 查询
- 通常,HQL 语法类似于 SQL 大多数数据分析师都熟悉的语法。下面的示例查询显示了所述表名中存在的所有记录。
- 示例查询 :选择 * 来自
- Hive 支持四种文件格式,分别是 TEXTFILE、SEQUENCEFILE、ORC 和 RCFILE (记录柱状文件)。
- 对于单个用户元数据存储,Hive 使用 derby 数据库,而对于多个用户元数据或共享元数据情况,Hive 使用 MYSQL。
用于设置 MySQL 作为数据库并存储元数据信息检查教程 《HIVE与MYSQL的安装与配置》
关于 Hive 的一些要点:
- HQL 和 SQL 之间的主要区别在于 Hive 查询在 Hadoop 的基础架构上执行,而不是在传统数据库上执行。
- Hive 查询执行将会像一系列自动生成的 map Reduce 作业一样。
- Hive 支持分区和存储桶概念,以便客户端执行查询时轻松检索数据。
- Hive 支持自定义特定的 UDF(用户定义函数),用于数据清理、过滤等。根据程序员的要求,可以定义 Hive UDF。
Hive 与关系数据库
通过使用 Hive,我们可以执行一些关系型数据库无法实现的特殊功能。对于 PB 级的海量数据,查询并在几秒钟内获得结果非常重要。而 Hive 可以非常高效地完成此操作,它可以快速处理查询并在几秒钟内产生结果。
现在让我们看看是什么让 Hive 如此之快。
Hive 和关系数据库之间的一些主要区别如下;
关系数据库具有“读时模式和写时模式“。首先创建一个表,然后将数据插入到特定表中。在关系数据库表上,可以执行插入、更新和修改等功能。
Hive 是“只读模式“。因此,更新、修改等功能不适用于此。因为典型集群中的 Hive 查询在多个数据节点上运行。因此无法跨多个节点更新和修改数据。(Hive 版本低于 0.13)
此外,Hive 支持“多次阅读,一次撰写”模式。这意味着插入表后,我们可以在最新的 Hive 版本中更新该表。
注意:但是新版本的 Hive 具有更新的功能。Hive 版本(Hive 0.14)提供了更新和删除选项作为新功能
蜂房 Archi质地
上面的截图解释了 阿帕奇 Hive 架构详解
Hive 主要由 3 个核心部分组成
- Hive 客户端
- 蜂巢服务
- Hive 存储和计算
Hive 客户端:
Hive 提供不同的驱动程序来与不同类型的应用程序进行通信。对于基于 Thrift 的应用程序,它将提供 Thrift 客户端进行通信。
对于 Java 相关应用程序,它提供 JDBC 驱动程序。除提供 ODBC 驱动程序的任何类型的应用程序之外。这些客户端和驱动程序反过来又与 Hive 服务中的 Hive 服务器进行通信。
蜂巢服务:
客户端与 Hive 的交互可以通过 Hive 服务进行。如果客户端想要在 Hive 中执行任何查询相关的操作,它必须通过 Hive 服务进行通信。
CLI 是命令行界面,充当 Hive 服务的 DDL(数据定义语言)操作。所有驱动程序都与 Hive 服务器以及 Hive 服务中的主驱动程序进行通信,如上图所示。
Hive 服务中的驱动程序是主驱动程序,它与所有类型的 JDBC、ODBC 和其他客户端特定应用程序进行通信。驱动程序将处理来自不同应用程序的请求,并将其发送到元存储和现场系统进行进一步处理。
Hive存储与计算:
Hive 服务(例如 Meta store、文件系统和 Job Client)依次与 Hive 存储进行通信并执行以下操作
- Hive中创建的表的元数据信息存储在Hive“元存储数据库”中。
- 查询结果和表中加载的数据将存储在 HDFS 上的 Hadoop 集群中。
作业执行流程:
从上面的截图中,我们可以了解 Hive 和 Hadoop 中的作业执行流程
Hive 中的数据流表现如下模式;
- 从 UI(用户界面)执行查询
- 驱动程序与编译器交互以获取计划。(这里的计划指的是查询执行)过程及其相关的元数据信息收集
- 编译器为要执行的作业创建计划。编译器与 Meta store 通信以获取元数据请求
- 元存储将元数据信息发送回编译器
- 编译器与驱动程序通信,并提出执行查询的计划
- 驱动程序向执行引擎发送执行计划
- 执行引擎(EE)充当 Hive 和 Hadoop 之间的桥梁来处理查询。用于 DFS 操作。
- EE 应该首先联系名称节点,然后联系数据节点以获取存储在表中的值。
- EE 将从数据节点获取所需的记录。表的实际数据仅驻留在数据节点中。而从名称节点,它仅获取查询的元数据信息。
- 它从与上述查询相关的数据节点收集实际数据
- 执行引擎 (EE) 与 Hive 中的元存储进行双向通信,以执行 DDL(数据定义语言)操作。在这里,可以执行 CREATE、DROP 和 ALTERING 表和数据库等 DDL 操作。元存储将仅存储有关数据库名称、表名称和列名称的信息。它将获取与所提及的查询相关的数据。
- 执行引擎 (EE) 依次与 Hadoop 守护进程(例如名称节点、数据节点和作业跟踪器)通信,以在 Hadoop 文件系统上执行查询
- 从驱动程序获取结果
- 将结果发送到执行引擎。一旦结果从数据节点获取到 EE,它将把结果发送回驱动程序和 UI(前端)
Hive 通过执行引擎持续与 Hadoop 文件系统及其守护进程保持联系。作业流程图中的虚线箭头显示了执行引擎与 Hadoop 守护进程的通信。
Hive 的不同模式
根据 Hadoop 中数据节点的大小,Hive 可以以两种模式运行。
这些模式包括:
- 本地模式
- MapReduce 模式
何时使用本地模式:
- 如果 Hadoop 安装在伪模式下,且只有一个数据节点,我们在此模式下使用 Hive
- 如果数据量较小,仅限于单机,可以采用此模式
- 本地机器上较小的数据集的处理速度非常快
何时使用Map Reduce模式:
- 如果 Hadoop 有多个数据节点,并且数据分布在不同的节点上,我们在此模式下使用 Hive
- 它将对大量数据集和查询进行并行执行
- 通过该模式可以实现对大数据集更好的性能处理
在 Hive 中,我们可以设置此属性来说明 Hive 可以在哪种模式下工作?默认情况下,它适用于 Map Reduce 模式,对于本地模式,您可以进行以下设置。
Hive 在本地模式下工作设置
设置mapred.job.tracker=本地;
从 Hive 0.7 版本开始,它支持在本地模式下自动运行 Map Reduce 作业的模式。
什么是 Hive Server2 (HS2)?
HiveServer2(HS2)是一个执行以下功能的服务器接口:
- 允许远程客户端针对 Hive 执行查询
- 检索提及的查询的结果
从最新版本开始,它具有一些基于 Thrift RPC 的高级功能,例如;
- 多客户端并发
- 认证
总结
Hive 是 Hadoop 生态系统之上的 ETL 和数据仓库工具,用于处理结构化和半结构化数据。
- Hive 是 Hadoop 生态系统中存在的数据库,执行 DDL 和 DML 操作,并提供灵活的查询语言(如 HQL)以便更好地查询和处理数据。
- 与具有一定局限性的 RDMS 相比,它提供了很多功能。
对于用户特定的逻辑,以满足客户的要求。
- 它提供了编写和部署自定义脚本和用户定义函数的选项。
- 此外,它还提供了用于存储特定逻辑的分区和存储桶。