Impala 简明教程

Impala - Architecture

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

impala architecture

Impala daemon(Impalad)

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

如果将某个查询提交给某个节点上的 Impala,该节点将充当该查询的“ coordinator node ”。由其他节点上运行的 Impala 处理多个查询。在接受查询后,Impala 读取和写入数据文件,并通过将工作分配给 Impala 群集中其他 Impala 节点来并行化查询。当查询在多个 Impala 实例上进行处理时,所有查询都将结果返回给中央协调节点。

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

Impala State Store

Impala 有一个称为 Impala 状态存储的其他重要组件,负责检查每个 Impala 的运行状况,然后频繁地向其他守护程序转达每个 Impala 守护程序的运行状况。它可以在运行 Impala 服务器的同一节点或群集内的其他节点上运行。

Impala 状态存储守护程序进程的名称是状态存储。Impalad 将其运行状况报告给 Impala 状态存储守护程序(即状态存储)。

如果由于任何原因发生节点故障,状态存储会将此故障更新到所有其他节点,一旦其他 impalad 获得此类通知,没有其他 Impala 守护程序会将任何进一步的查询分配给受影响的节点。

Impala Metadata & Meta Store

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

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

当表定义或表数据更新时,其他 Impala 守护程序必须通过在针对相关表发出新查询之前检索最新的元数据来更新它们的元数据缓存。

Query Processing Interfaces

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

  1. Impala-shell − 使用 Cloudera VM 设置 Impala 之后,可以通过在编辑器中键入命令 impala-shell 来启动 Impala 外壳。我们将在后面的章节中讨论有关 Impala 外壳的更多信息。

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

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

Query Execution Procedure

每当用户使用所提供的任何接口传递查询时,该查询将被集群中的 Impala 之一接受。该 Impala 被视为该特定查询的协调器。

在接收到查询后,查询协调器使用来自 Hive 元存储的 Table Schema 验证查询是否适当。稍后,它从 HDFS 名称节点收集执行查询所需数据的所在位置的信息,并将此信息发送到其他 impalad 以执行查询。

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