Impala 是由 Cloudera 公司推出的,提供了对 HDFS、Hbase 数据的高性能、低延迟的交互式 SQL 查询功能。Impala 基于 Hive,使用内存计算,具有实时、批处理、多并发等优点。
一、Impala 构成
Impala 采用了对等式架构,所有角色之间是对等的,没有主从之分。主要由三个服务构成:Catalog、Statestore 和 Impalad。
Catalog:元数据服务。从 hive metastore 中同步元数据信息,并分发到各个 impalad 服务。Statestore:状态存储服务。Impala 对称的节点架构要求所有的节点必须都能够接收并执行查询,而 Statestored 正是负责以上这些功能,即将所有元信息及其修改同步到各个 Impalad。Impalad:担任协调者和执行者双重角色。作为协调者,接收客户端查询请求并对其进行词法分析、语法分析、生成逻辑查询计划以及物理查询计划,之后将各个执行片段(segement)分配给其他 Impalad 上执行;作为执行者,Impalad 也会执行其他 Impalad 给其分配的任务,主要就是对本地 HDFS 和 HBase 里的部分数据进行操作。
二、Impala 运行原理

用户提交查询前,Impala 先创建一个负责协调客户端提交的查询的 Impalad 进程,该进程会向 Statestore 提交注册订阅信息,Statestore 会创建一个 Statestored 进程,Statestored 进程通过创建多个线程来处理 Impalad 的注册订阅信息。
客户端提交一个查询到 Impalad 进程,Impalad 的 Query Planner 对 SQL 语句进行解析,生成解析树;然后 Planner 把这个查询的解析树变成若干 PlanFragment,发送到 Query Coordinator。
Coordinator 通过从元数据库中获取元数据,从 HDFS 的 node manager 中获取数据地址,以得到存储这个查询相关数据的所有数据节点。
Coordinator 初始化相应 Impalad 上的任务执行,即把查询任务分配给所有存储这个查询相关数据的数据节点。
Query Executor 通过流式交换中间输出,并由 Query Coordinator 汇聚来自各个 Impalad 的结果。
Coordinator 把汇总后的结果返回给客户端。
三、安装 Impala
1. Impala 官网相关
官网地址:http://impala.apache.org/
官方文档:http://impala.apache.org/impala-docs.html
下载地址:http://impala.apache.org/downloads.html
2. Impala 安装方式
Impala 安装方式主要有2种,一种是手动安装,一种是通过 CDH 安装,这里推荐 CDH 安装。
安装过程就不演示了,根据提示,鼠标点点点就装完了。
3. Impala 监控页面
查看 StateStore:http://localhost:25020
查看 Catalog:http://localhost:25010
四、Impala 优缺点
1. 优点
基于内存运算,中间结果不需要落盘,节省了大量 I/O 开销
无需转换为 MapReduce,直接访问存储在 HDFS,HBase 中的数据进行作业调度,查询速度快
使用了数据本地化的 I/O 调度机制,尽可能将数据和计算分配在
同一台机器上进行,减少了网络开销丰富的文件格式支持,如 TEXTFILE 、SEQUENCEFILE 、RCFile、Parquet
可以访问 hive 的 metastore,可以对 hive 数据直接做数据分析
2. 缺点
对内存的依赖较大,且完全依赖于 hive
只能读取文本文件,而不能直接读取自定义二进制文件
每当新的记录/文件被添加到HDFS中的数据目录时,该表需要被刷新
五、Impala 优化
尽量将 StateStore 和 Catalog 单独部署到同一个节点,保证他们正常通行
2、通过对 Impala Daemon 内存限制(默认256M)及 StateStore 工作线程数,来提高Impala的执行效率。
选择合适的文件格式进行存储,提高查询效率。
使用合适的分区技术。
查询时,尽可能的做条件过滤。
输出文件时,避免使用美化输出。
尽量少用全量元数据的刷新
根据 profile 输出的底层信息,做相应环境参数优化
六、Impala 简单使用
启动 Impala
impala-shell
查看数据库
show databases;
打开数据库
use default;
查看数据表
show tables;
建表
create table demo_tbl(id int, name string)
row format delimited
fields terminated by '\t';
向表中导入数据
load data inpath 'demo.txt' into table demo_tbl;
查询表中数据
select * from demo_tbl;
退出
quit;
往期推荐