Impala简介

简介

1 Impala架构

1.1 SMP: share everything

对称多处理器结构

共享所有资源。多个CPU之间没有区别,平等地访问内存、外设、一个操作系统。操作系统管理着一个队列,每个处理器依次处理队列中的进程。

MPP: share nothing

海量并行处理

MPP 由多个SMP服务器通过一定的节点互连, 协同工作,完成相同的任务,从用户的角度来看是一个服务器系统。

NUMA:share something

NUMA 服务器的基本特征是具有多个 CPU 模块,每个 CPU 模块由多个 CPU 组成,并且具有独立的本地内存、 I/O 槽口等。由于其节点之间可以通过互联模块 进行连接和信息交互,因此每个 CPU 可以访问整个系统的内存。

Impala各进程角色

Impala 架构

impalad

Impala核心进程,安装在Impala每个节点上

state store

可以运行在Impala服务器或集群中的其他节点的同一节点上运行

statestore并非关键进程,即使不可用,impalad进程节点间仍然可以相互协调正常对外提供分布式查询。

metasotre

表和列信息和表定义的重要细节存储在称为元存储的集中式数据库中。

查询处理接口

CLI:用户查询的命令行共组,还提供了Hue、JDBC、ODBC等接口。

impala查询数据流程

  1. client 提交查询任务
  2. 其中一个impalad进程接受查询任务, 此impalad被定为“查询协调程序”。(类似中心节点)
  3. 接受到查询后,使用Hive元存储中的表模式验证查询是否合适。
  4. 中心impalad, 获取元数据信息和datanode地址。
  5. 所有其他impalad读取指定的数据块并处理查询
  6. 所有进程完成任务,中心impalads将收集结果并将其传递给client。

Impala 优势

  1. 基于内存计算
  2. Impala直接通过对应的服务进程来进行作业调度,省掉了MR作业启动的开销
  3. 使用MPP并行数据库的思想,省掉不必要的shuffle、sort等开销
  4. 使用C++实现,并做了硬件优化
  5. 使用data local的IO调度制度,减少网络开销

Impala资源管理器

  1. 静态资源池
    • CDH 中将各服务彼此隔开,分配专用资源。
  2. 动态资源分配
    • 用于配置及用于在池中运行的yarn或impala查询之间安排资源的策略

Impala和yarn:Impala2.3之前,使用yarn做资源调度 2.3之后,自身的资源调度策略Long-Lived Application Master,LIAMA

相关参数

  1. set request_pool=impala10001;
    • 将查询语句提交到名字叫impala10001 的资源池
  2. set men_limit=10kb
    • explain select count(*) from …where …
    • 设置本次执行语句内存限制
  3. set explain_level=3;
    • 设置执行计划显示的详细程度,等级越高越详细
    • 一般使用默认的,就足够了
  4. INVALIDATE METADATA
    • 全部同步,一般不推荐使用
  5. REFRESH refresh work.userinfo
    • 推荐使用,同步指定的数据