Apache Hive 架构和命令:模式、特征和应用
已发表: 2021-06-30目录
什么是蜂巢?
Apache Hive 是 Facebook 开发的一种开源数据仓库工具,用于分布式处理和数据分析。 它是在 Hadoop 分布式文件系统 (HDFS) 之上开发的。 Hive 提供了一种将结构投影到 Hadoop 中的数据的机制。 一种称为 HiveQL (HQL) 的类 SQL 语言用于查询该数据。 Hive 中的表和关系数据库中的表之间存在相似性。 任何熟悉 SQL 的人都可以轻松编写 Hive 查询。
Hive 的一些功能是:
- 将架构信息存储到数据库中,并将处理后的数据存储到 HDFS 中。
- 专为 OLAP 设计。
- 查询语言为 HiveQL 或 HQL,与 SQL 类似。
- 它快速、熟悉、可扩展且可扩展。
蜂巢的用途
- 它是 Apache Hive 分布式存储。
- 提供的工具使用户能够轻松地提取、转换和加载数据。
- 提供了多种数据格式来提供结构。
- Hive 可以访问存储在 Hadoop 分布式文件系统 (HDFS) 中的文件。
蜂巢的命令
蜂巢命令是:
- 数据定义语言(DDL):通过这些命令构建和修改数据库中的表和其他对象。
- CREATE:用于创建表或数据库。
- SHOW:用于显示数据库、表、属性等。
- ALTER:用于对现有表进行更改。
- DESCRIBE:描述表列。
- TRUNCATE:用于永久截断和删除表的行。
- DELETE:删除表数据,但可以恢复。
- 数据操作语言(DML):用于检索、存储、修改、删除、插入和更新数据库中的数据。
- LOAD、INSERT 语句的语法
将数据 <LOCAL> inpath <文件路径> 加载到表 [tablename] 中
- 加载数据后,数据操作命令用于检索数据。
- 计数聚合函数用于统计表中记录的总数。
- “create external”关键字用于创建表并提供创建表的位置。 EXTERNAL 表指向其存储的任何 HDFS 位置。
- 插入命令用于加载数据 Hive 表。 “插入覆盖”用于覆盖现有数据,“插入”用于将数据附加到现有数据中。
- 通过“partitioned by”命令将表划分为分区,并通过“clustered by”命令划分为桶。
- 由于未启用动态分区,因此插入数据会引发错误。 因此,需要在 Hive shell 中设置以下参数。
设置 hive.exec.dynamic.partition=true;
启用动态分区,默认为 false
设置 hive.exec.dynamic.partition.mode=nonstrict;
- 'Drop Table' 命令删除表的数据和元数据
- 聚合: 语法:
从表名中选择计数(DISTINCT 类别);
该命令将计算“cate”表的不同类别。
- 分组: 语法:
按类别从txt记录中选择类别,总和(金额)
结果集将被分组为一列或多列。
- 连接操作:通过使用每列共有的值来组合两个表中的字段。
- 左外连接:对于表 A 和 B,左外连接是包含“左”表 (A) 的所有记录,即使连接条件在“右”表 (B) 中找不到任何匹配记录。
- 右外连接:“右”表 (B) 中的每一行将至少出现在连接表中一次。
- 完全连接:连接表将包含两个表中的所有记录连接表将包含两个表中的所有记录。
蜂巢架构
apache hive 架构如图1所示。
主要部件清单
Hive 架构的主要组件是:
1. Hive 客户端
用 Java、Python、C++ 等语言编写的不同应用程序通过使用 Hive 提供的不同驱动程序进行通信。 它可以根据选择用任何语言编写。 客户端和服务器依次与 Hive 服务中的 Hive 服务器通信。
大多数情况下,它们分为三种类型:
- Thrift 客户端:它基于 Apache Thrift 来服务来自 Thrift 客户端的请求。 Thrift 客户端将用于基于 Thrift 的应用程序的通信。
- JDBC 客户端: JDBC 是为与 Java 相关的应用程序提供的。 Java 应用程序使用 JDBC 驱动程序连接到 Hive。 它进一步使用 Thrift 与 Hive 服务器进行通信。
- ODBC 客户端:允许基于 ODBC 协议的应用程序通过 ODBC 驱动程序连接到 Hive。 与 JDBC 类似,它使用 Thrift 与 Hive 服务器通信。
2. 蜂巢服务
Hive 服务为 Hive 与客户端的交互提供了手段。 必须由客户执行的任何与查询相关的操作都必须通过租用服务进行通信。 对于数据定义语言 (DDL) 操作,CLI 充当 Hive 服务。
所有驱动程序都必须与 Hive 服务器通信,然后与 Hive 服务中的主驱动程序通信。 Hive 服务中的驱动程序代表与客户端特定应用程序和所有类型的 JDBC、ODBC 等通信的主要驱动程序。来自不同应用程序的请求由驱动程序处理到元存储和字段系统,这些系统将进一步处理。
Hive 提供的服务有:
- Beeline: Beeline 是一个命令外壳,用户可以在其中向系统提交查询。 HiveServer2 支持它。 它是一个基于 SQLLINE CLI 的 JDBC 客户端。
- Hive Server 2:允许客户端对 hive 执行查询。 HiveServer1 的继承者,它允许从多个客户端执行多个查询。 它为 JDBC 和 ODBC 等开放 API 客户端提供了最佳支持。
- Hive Driver:用户通过命令行向 Hive 驱动提交 HiveQL 语句。 它将查询发送到编译器并为查询创建会话句柄。
- Hive 编译器: Hive 编译器用于传递查询。 使用存储在元存储中的元数据,Hive 编译器对不同的查询块和表达式执行语义分析和类型检查。 然后由编译器生成执行计划,即 DAG(有向无环图)。 DAG 的每个阶段都是元数据操作、HDFS 上的操作,或者是 map/reduce 作业。
- 优化器:优化器的主要作用是对执行计划进行变换操作。 它通过拆分任务来提高效率和可扩展性。
- 执行引擎:编译优化步骤完成后,执行引擎的作用就是执行编译器创建的执行计划。 该计划是按照它们的依赖关系使用 Hadoop 执行的。
- Metastore :Metastore 一般是一个关系型数据库,存储与表和分区结构相关的元数据信息。 它是一个中央存储库,还包括存储列和列类型的信息。 与序列化器和反序列化器相关的信息也存储在 Metastore 中,这是读/写操作所需的,以及存储数据的 HDFS 文件。 Metastore 提供了一个 Thrift 接口,用于查询和操作 Hive 元数据。
Metastore 可以配置为两种模式:
- 远程:此模式对非 Java 应用程序很有用,在远程模式下,元存储是 Thrift 服务。
- Embedded:在这种模式下,客户端可以通过 JDBC 直接与 Metastore 交互。
- HCatalog: Hadoop 的表和存储管理层是 HCatalog。 可以使用不同的数据处理工具在网格上读取和写入数据,如 Pig、MapReduce 等。建立在 Hive Metastore 之上,Hive Metastore 的表格数据暴露给其他数据处理工具。
- WebHCat: WebHCat 是 HCatalog 的 HTTP 接口和 REST API。 它执行 Hive 元数据操作并提供运行 Hadoop MapReduce(或 YARN)、Pig、Hive 作业的服务。
3. 处理和资源管理
查询的执行由内部 MapReduce 框架执行。
MapReduce 框架是一个软件框架,用于在大型商用硬件集群上处理大量数据。 数据被分成块,然后由 map-reduce 任务处理。
4.分布式存储
Hive 服务与 Hive 存储通信以执行以下操作:
- Hive“元存储数据库”保存在 Hive 中创建的表的元数据信息。
- HDFS 上的 Hadoop 集群将存储查询结果和加载到表中的数据。
Hive 的不同模式
根据数据的大小,Hive 可以在两种模式下运行。
- 本地模式
Hive 的本地模式在以下情况下使用
- 安装的Hadoop只有一个数据节点,安装在伪模式下。
- 单台本地机器的数据量更小。
- 由于存在较小的数据集,因此可以在本地机器上进行快速处理。
- 地图缩减模式
Hive 的 Map reduce 模式在以下情况下使用
- Hadoop 有多个数据节点,数据分布在不同的节点上。
- 数据量较大,需要并行执行查询。
- 可以以更好的性能处理大型数据集。
蜂巢的特征
- 在创建表和数据库之后将数据加载到表中。
- Hive 只能对存储在表中的结构化数据进行管理和查询。
- Hive 框架在处理 Map Reduce 中不存在的结构化数据时具有优化和可用性的特点。
- 为了易于使用,与 Map Reduce 的复杂编程语言相比,受 Hive SQL 启发的语言是一种更简单的方法。 Hive 中使用了熟悉的表、行、列等概念。
- 为了提高查询的性能,Hive 可以使用目录结构对数据进行分区。
- Hive 包含一个名为“Metastore”的重要组件,它驻留在关系数据库中并存储模式信息。 可以使用两种方法与 Hive 交互:Web GUI 和 Java 数据库连接 (JDBC) 接口。
- 大多数交互都使用命令行界面 (CLI)。 CLI 用于使用 Hive 查询语言 (HQL) 编写 Hive 查询。
- HQL 语法类似于 SQL 语法。
- Hive 支持四种文件格式; TEXTFILE、SEQUENCEFILE、ORC 和 RCFILE(记录列文件)。
结论
Apache Hive 是一个开源数据仓库工具,由 Hive 客户端、Hive 服务、处理框架和资源管理以及分布式存储等主要组件组成。
它建立在 Hadoop 生态系统之上,用于处理结构和半结构化数据。 Hive 提供的用户界面使用户能够以 Hive 查询语言 (HQL) 提交他们的查询。 这被传递给编译器以生成执行计划。 该计划最终由执行引擎执行。
如果您有兴趣了解有关大数据的更多信息,请查看我们的 PG 大数据软件开发专业文凭课程,该课程专为在职专业人士设计,提供 7 多个案例研究和项目,涵盖 14 种编程语言和工具,实用的动手操作研讨会,超过 400 小时的严格学习和顶级公司的就业帮助。
在 upGrad 查看我们的其他软件工程课程。