Impala - 架构



Impala 是一个运行在 Hadoop 集群中多个系统上的 MPP(大规模并行处理)查询执行引擎。与传统的存储系统不同,Impala 与其存储引擎分离。它有三个主要组件,即 Impala 守护进程(Impalad)、Impala 状态存储和 Impala 元数据或元存储。

Impala Architecture

Impala 守护进程(Impalad)

Impala 守护进程(也称为 **impalad**)在安装了 Impala 的每个节点上运行。它接受来自各种接口(如 Impala shell、Hue 浏览器等)的查询,并处理这些查询。

每当向特定节点上的 impalad 提交查询时,该节点将作为该查询的“**协调节点**”。多个查询也由运行在其他节点上的 Impalad 提供服务。在接受查询后,Impalad 读取并写入数据文件,并通过将工作分配给 Impala 集群中的其他 Impala 节点来并行化查询。当查询在各种 Impalad 实例上处理时,所有实例都将结果返回到中央协调节点。

根据需要,可以将查询提交到专用的 Impalad 或以负载均衡的方式提交到集群中的另一个 Impalad。

Impala 状态存储

Impala 还有另一个重要的组件称为 Impala 状态存储,它负责检查每个 Impalad 的健康状况,然后定期将每个 Impala 守护进程的健康状况转发给其他守护进程。这可以在 Impala 服务器所在的同一节点或集群中的其他节点上运行。

Impala 状态存储守护进程的名称是 State stored。Impalad 会将其健康状态报告给 Impala 状态存储守护进程,即 State stored。

如果由于任何原因导致节点发生故障,State store 会将此故障更新到所有其他节点,并且一旦其他 impalad 收到此通知,就不会有其他 Impala 守护进程将任何其他查询分配给受影响的节点。

Impala 元数据和元存储

Impala 元数据和元存储是另一个重要的组件。Impala 使用传统的 MySQL 或 PostgreSQL 数据库来存储表定义。重要的细节,如表和列信息以及表定义,都存储在一个称为元存储的集中式数据库中。

每个 Impala 节点都会在本地缓存所有元数据。在处理海量数据和/或大量分区时,获取表特定的元数据可能需要大量时间。因此,本地存储的元数据缓存有助于即时提供此类信息。

当表定义或表数据更新时,其他 Impala 守护进程必须通过检索最新的元数据来更新其元数据缓存,然后才能针对相关表发出新的查询。

查询处理接口

为了处理查询,Impala 提供了以下三个接口。

  • **Impala-shell** - 使用 Cloudera VM 设置 Impala 后,您可以在编辑器中键入命令 **impala-shell** 来启动 Impala shell。我们将在后续章节中详细讨论 Impala shell。

  • **Hue 接口** - 您可以使用 Hue 浏览器处理 Impala 查询。在 Hue 浏览器中,您有 Impala 查询编辑器,您可以在其中键入和执行 Impala 查询。要访问此编辑器,首先需要登录到 Hue 浏览器。

  • **ODBC/JDBC 驱动程序** - 与其他数据库一样,Impala 提供了 ODBC/JDBC 驱动程序。使用这些驱动程序,您可以通过支持这些驱动程序的编程语言连接到 Impala,并构建使用这些编程语言在 Impala 中处理查询的应用程序。

查询执行过程

每当用户使用提供的任何接口传递查询时,集群中的一个 Impalad 都会接受此查询。此 Impalad 被视为该特定查询的协调器。

在收到查询后,查询协调器使用 Hive 元存储中的 **表模式** 验证查询是否合适。之后,它从 HDFS 名称节点收集有关执行查询所需数据位置的信息,并将此信息发送到其他 impalad 以执行查询。

所有其他 Impala 守护进程读取指定的数据块并处理查询。当所有守护进程完成其任务后,查询协调器收集结果并将其交付给用户。

广告