Impala - 架构

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

Impala 架构

Impala 守护进程(Impalad)

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

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

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

Impala State Store

Impala 还有另一个重要组件,称为 Impala State store,它负责检查每个 Impalad 的运行状况,然后经常将每个 Impala 守护进程的运行状况转发给其他守护进程。 它可以在运行 Impala 服务器或集群内其他节点的同一节点上运行。

Impala State 存储守护进程的名称是StatestoredImpalad 向 Impala State 存储守护进程报告其健康状态,即 Statestored

如果由于任何原因发生节点故障,Statestore 会更新所有其他节点有关此故障的信息,一旦其他 impalad 收到此类通知,没有其他 Impala 守护进程向受影响的节点分配任何进一步的查询。

Impala 元数据和元存储

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

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

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

查询处理接口

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

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

  • Hue interface − 您可以使用 Hue 浏览器处理 Impala 查询。 在 Hue 浏览器中,您有 Impala 查询编辑器,您可以在其中键入并执行 impala 查询。 要访问此编辑器,首先,您需要登录 Hue 浏览器。

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

查询执行过程

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

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

所有其他 Impala 守护进程都会读取指定的数据块并处理查询。 一旦所有守护进程完成其任务,查询协调器就会收集返回结果并将其传递给用户。