impala-架构-官方文档翻译

The following sections provide background information to help you become productive using Impala and its features.
Where appropriate(在适当的地方), the explanations include context to help understand how aspects of Impala relate to other technologies(impala跟其他技术关联的各个方面) you might already be familiar with, such as relational database management systems and data warehouses, or other Hadoop components such as Hive, HDFS, and HBase.

impala server的组件component

Impala的服务端是一个分布式的、大规模并行处理(MPP)数据库引擎。不像hive,impala的服务端天然就是分布式的,在架构层面上,它在安装时就会跟DN计算节点放在一起。

1. The Impala Daemon,impalad

impalad并不是客户端,而是服务端,只不过跟DN放在一起而已。
它负责读写数据,接收从impala-shell、hue、JDBC or ODBC发来的命令,将这些命令分发到work节点执行,并将执行结果返回给central coordinator node。

你可以向运行在任意节点的Impala daemon提交查询,这个节点将会作为这个查询的协调器(central coordinator node),Impala d将任务分发给其他节点,其他节点执行完后将会传输部分结果集给这个协调器节点。由这个协调器节点构建最终的结果集。在做实验或者测试的时候为了方便,我们往往连接到同一个Impala daemon来执行查询,但是在生产环境运行产品级的应用时,使用jdbc接口,我们应该循环(按顺序)的在不同节点上面提交查询,这样才能使得集群的负载达到均衡。

Impala daemon不间断的跟statestore进行通信交流,从而确认哪个节点是健康的能接收新的工作任务。它同时接收catalogd daemon(从Impala 1.2之后支持)传来的广播消息来更新元数据信息,当集群中的任意节点create、alter、drop任意对象、或者执行INSERT、LOAD DATA的时候触发广播消息。

在2.9或更高版本,可以指定coordinators节点和query节点,以此在大型集群上来适应高并发和可伸缩
See Scalability Considerations for Impala on page 679 for details.

2. Impala Statestore

Impala Statestore检查集群各个节点上Impala daemon的健康状态,同时不间断地将结果反馈给各个Impala daemon。这个服务的物理进程名称是statestored,在整个集群中我们仅需要一个这样的进程即可。如果某个Impala节点由于硬件错误、软件错误或者其他原因导致离线,statestore就会通知其他的节点,避免其他节点再向这个离线的节点发送请求。

由于statestore是当集群节点有问题的时候起通知作用,所以它对Impala集群并不是有关键影响的。如果statestore没有运行或者运行失败,其他节点和分布式任务会照常运行,只是说当节点掉线的时候集群会变得没那么健壮。当statestore恢复正常运行时,它就又开始与其他节点通信并进行监控。

3. Impala Catalog

Imppalla catalog服务将SQL语句做出的元数据变化通知给集群的各个节点,catalog服务的物理进程名称是catalogd,在整个集群中仅需要一个这样的进程。由于它的请求会跟statestore daemon交互,所以最好让statestored和catalogd这两个进程在同一节点上

catalog服务减少了REFRESH和INVALIDATE METADATA语句的使用。在之前的版本中,当在某个节点上执行了CREATE DATABASE、DROP DATABASE、CREATE TABLE、ALTER TABLE、或者DROP TABLE语句之后,需要在其它的各个节点上执行命令INVALIDATE METADATA来确保元数据信息的更新。同样的,当你在某个节点上执行了INSERT语句,在其它节点上执行查询时就得先执行REFRESH table_name这个操作,这样才能识别到新增的数据文件。==》
修改表结构用INVALIDATE METADATA
修改数据用REFRESH table_name

这个功能涉及的impala的相关知识:
如果CREATE TABLE, INSERT,or other table-changing or data-changing operation is performed through Impala,不需要执行The REFRESH and INVALIDATE METADATA statements。如果是通过hive或者手动修改hdfs文件,只需要在一个节点上执行。

See REFRESH Statement on page 318 and INVALIDATE METADATA Statement on page 311 for the latest usage information for those statements.

{1} 使用load_catalog_in_background命令控制表元数据的加载

2.2以后默认为false。如果设为false,只在第一次使用表时就加载元数据,
如果设置为true,则catalog服务将尝试加载表的元数据,即使查询不需要该元数据。所以当第一个需要元数据的查询运行时,元数据可能已经被加载。基于以下原因,不推荐设为true

  • Background load can interfere(影响) with query-specific metadata loading. This can happen on startup or after
    invalidating metadata, with a duration depending on the amount of metadata(元数据量大), and can lead to a seemingly
    random long running queries that are difficult to diagnose(诊断).
  • Impala may load metadata for tables that are possibly never used, potentially increasing catalog size and consequently memory usage for both catalog service and Impala Daemon.

{2}

多数lb和ha的注意事项都已经在impalad服务中应用。statestored和catalogd 守护进程对ha没有需求,因为即使宕机也不会导致数据丢失。如果statestored和catalogd 不可用,可以:1.停止Impala service 2.删除 Impala StateStore and Impala Catalog Server的角色,然后把这2个角色添加到别的节点,重启Impala service即可。
在Impala 1.2.4或更高版本中,可以在Hive中创建表之后,INVALIDATE METADATA命令后面可以跟表名,允许您在不完全重新加载目录元数据的情况下,使各个表对Impala可见。

日志

http://impalad-node-hostname:25000

impala查询流程

impala-架构-官方文档翻译
impala-架构-官方文档翻译