目录
Impala主要由Impalad,State Store和CLI三部分组成
9.5 Impala
9.5.1 Impala简介
Impala
是由
Cloudera
公司开发的新型查询系统,它提供
SQL
语义,能查询存储在
Hadoop
的
HDFS
和
HBase
上的
PB
级大数据
,
在性能上比
Hive
高出
3~30
倍
Impala
的运行需要依赖于
Hive
的元数据
Impala
是参照
Dremel
系统进行设计的
Impala
采用了
与商用并行关系数据库类似的分布式查询引擎
,可以
直接与
HDFS
和
HBase
进行交互
查询
Impala
和
Hive
采用相同的
SQL
语法、
ODBC
驱动程序和用户
接口
Impala
与其他组件关系
![](https://img-blog.csdnimg.cn/direct/e30d475d142740ac8aa6dda25ce21952.png)
9.5.2 Impala系统架构
Impala主要由Impalad,State Store和CLI三部分组成
Impalad
Ø
负责协调客户端提交的查询的执行
Ø
包含
Query Planner
、
Query Coordinator
和
Query Exec Engine
三个模块
Ø
与
HDFS
的数据节点(
HDFS DN
)运行在同一节点上
Ø
给其他
Impalad
分配任务以及收集其他
Impalad
的执行结果进行汇总
Ø
Impalad
也会执行其他
Impalad
给其分配的任务,主要就是对本地
HDFS
和
HBase
里的部分数据进行
操作
State
Store
Ø
会创建一个
statestored
进程
Ø
负责收集分布在集群中各个
Impalad
进程的资源信息
,用于查询调度
CLI
Ø
给用户提供查询使用的命令行工具
Ø
还
提供了
Hue
、
JDBC
及
ODBC
的
使用接口
说明:Impala中的元数据直接存储在Hive中。Impala采用与Hive相同的元数据、SQL语法、ODBC驱动程序和用户接口,从而使得在一个Hadoop平台上,可以统一部署Hive和Impala等分析工具,同时支持批处理和实时查询。
9.5.3 Impala查询执行过程
Impala执行查询的具体过程:
①
第
0
步,当用户提交查询前,
Impala
先创建一个负责协调客户端提交的查询的
Impalad
进程,该进程会向
Impala State Store
提交注册订阅信息,
State Store
会创建一个
statestored
进程,
statestored
进程通过创建多个线程来处理
Impalad
的注册订阅信息。
②
第
1
步,用户通过
CLI
客户端提交一个查询到
impalad
进程,
Impalad
的
Query Planner
对
SQL
语句进行解析,生成解析树;然后,
Planner
把这个查询的解析树变成若干
PlanFragment
,发送到
Query Coordinator
③
第
2
步,
Coordinator
通过从
MySQL
元数据库中获取元数据,从
HDFS
的名称节点中获取数据地址,以得到存储这个查询相关数据的所有数据节点。
④
第
3
步,
Coordinator
初始化相应
impalad
上的任务执行,即把查询任务分配给所有存储这个查询相关数据的数据节点。
⑤
第
4
步,
Query Executor
通过流式交换中间输出,并由
Query Coordinator
汇聚来自各个
impalad
的结果。
⑥
第
5
步,
Coordinator
把汇总后的结果返回给
CLI
客户端
。
9.5.4 Impala与Hive的比较
Hive与Impala的不同点总结如下:
1.
Hive
适合于长时间的批处理查询分析,而
Impala
适合于实时交互式
SQL
查询
2.
Hive
依赖于
MapReduce
计算框架,
Impala
把执行计划表现为一棵完整的执行计划树,
直接
分发执行计划到各个
Impalad
执行查询
3.
Hive
在执行过程中,如果内存放不下所有数据,则会使用外存,以保证查询能顺序执行完成,而
Impala
在遇到内存放不下数据时,不会利用外存,所以
Impala
目前处理查询时会受到一定的限制
Hive与Impala的相同点总结如下:
1.
Hive
与
Impala
使用相同的存储数据池
,
都支持把数据存储于
HDFS
和
HBase
中
2.
Hive
与
Impala
使用相同的元数据
3.
Hive
与
Impala
中对
SQL
的解释处理比较相似,都是通过词法分析生成执行计划
总结
Impala的目的不在于替换现有的MapReduce工具
把Hive与Impala配合使用效果最佳
可以先使用Hive进行数据转换处理,之后再使用Impala在Hive处理后的结果数据集上进行快速的数据分析