Impala Daemon
Impala 核心组件之一就是 Impala Daemon,它可以运行集群的每个Datanode节点上,进程名 impalad。
Impala Daemon 通过 impala-shell 命令行,Hue,JDBC 或者 ODBC 接受查询请求并分发任务,然后并行查询,最后将中间查询结果返回到中央协调器,由中央协调器返回最后的结果。
我们可以提交查询到任何一个 impala daemon节点,然后该节点的 impala daemon 就会作为中央协调器(coordinator node )。如果每次查询都使用同一节点作为 coordinator 那么会对节点造成很大的负载,因此建议以轮询的方式提交查询任务。
Impala daemon 与 statestore 不断通信,监控daemon 的健康状况,并确定哪些节点可以接收新工作。当任何节点做 create,alter,drop,insert,load data操作时,Impala daemon 从 catalogd 接受广播消息,这样可以减少 REFRESH 和 INVALIDATE METADATA 的调用。
Impala Statestore
Impala statestore 用来检测 Impala daemon 的健康状况,集群中只能有一个 statestoe,物理表现为 statestored,当 daemon 状态异常时,statestore 会通知其他 daemon 不再发送查询到此 daemon 。
Statestore 并不是必须的服务,它只监控 daemon 服务,即使 statestore 异常或未启动 Impala daemon 照样可以执行查询,只不过 daemon 异常时,无法通知其他 daemon 服务。Statestore 服务并不需要 HA,如果服务异常或者主机损坏可以直接重新添加一个 statestore 服务即可。
Impala Catalog Service
Catalog 服务可以把 Impala SQL 对元数据的修改广播到所有节点。物理进程是 catalogd,同statestore 一样不需要做HA,且建议与 statestore 部署到同一节点,因为转播请求需通过 statestore 进行。Catalog 服务避免了 REFRESH 和 INVALIDATE METADATA 语句的执行。当通过 Hive 创建表、加载数据时,需要在 Impala 上手动 执行 REFRESH 或 INVALIDATE METADATA 。
使用 Impala 创建表,插入数据或者其他表修改或者表数据修改的操作时,不需要执行 REFRESH 和 INVALIDATE METADATA 语句。如果是在 Hive操作则需要执行,但也仅需要在一台节点上执行。
默认,元数据的加载与缓存是异步的,这样 Impala 可以更及时的处理客户端请求。修改 catalogd 配置 load_catalog_in_background=false ,则会等待元数据加载完成再处理客户端请求