Impala的定位是一种新型的MPP查询引擎,但是它又不是典型的MPP类型的SQL引擎,提到MPP数据库首先想到的可能是GreenPlum,它的每一个节点完全独立,节点直接不共享数据,节点之间的信息传递全都通过网络实现。而Impala可以说是一个MPP计算引擎,它需要处理的数据存储在HDFS、Hbase或者Kudu之上,这些存储引擎都是独立于Impala的,可以称之为第三方存储引擎,Impala使用MPP的思想实现了计算。
对于每一个Impala执行的SQL,可能同时在多个工作节点上运行计算,每一个节点执行查询任务的一部分,然后通过网络通信传递给下一个子任务,中间数据尽可能的不落地(写磁盘,无论是本地还是第三方存储引擎)。之所以Impala能够提供较高性能的查询服务,最根本的原因就在于这两点:中间数据不落地;任务尽可能并行化。当然,还有一些实现细节也是非常重要的,本文就从一个SQL的执行过程来详细介绍Impala是如何处理查询的。
名词解释
- Impala:一个SQL查询引擎
- HDFS:分布式数据存储引擎
- catalogd:impala系统中的元数据服务节点
- statestored:impala系统中的消息同步节点
- impalad:impala系统中的任务执行节点
- coordinator:impalad节点中的协调者模块,对外提供查询接口,包括beeswax和HiveServer2接口
- backend:impalad节点中任务执行模块,提供执行任务的接口
- BE:impalad代码上划分的frontend部分,使用JAVA实现
- FE:impalad代码上划分的backend部分,使用C++实现
- beeswax接口:impalad提供的一种SQL查询接口。
- HiveServer2接口:impalad提供的一种兼容HiveServer2的接口。
- Analyser:Impala FE中实现的SQL解析器。
- Planner:Impala FE中实现的S