1、什么是Impala
Impala是一个架构于hadoop之上的全新、开源MPP查询引擎,提供低延迟、高并发的以读为主的查询。
Impala提升了查询性能,又保留了用户熟悉的操作。通过Impala,你可以使用SELECT、JOIN和聚集函数等语法,实时地查询储存在HDFS或HBase上的数据。除此之外,Impala使用Hive的元数据库、SQL语法,ODBC驱动及用户界面,提供一个友好、统一的平台进行批处理或实时查询。因此,Hive用户能够很方便的使用Impala。
2、Impala架构
为了避免延迟,Impala摒弃了MapReduce引擎,借鉴MPP并行数据库的思想,使用一个专用的、分布式的查询引擎直接访问数据。依据查询的类型和配置,与Hive相比较,性能有数量级的提升。
由架构图可以看出查询的执行过程:
- 由Client发送一个执行SQL到任意一台Impalad的Query Planner
- 由Query Planner 把SQL发向Query Coordinator
- 由Query Coordinator 来调度分配任务到Impalad的所有节点
- 各个Impalad节点的Query Executor 进行执行SQL工作
- 执行SQL结束以后,将结果返回给Query Coordinator
- 再由Query Coordinator 将结果返回给Client
3、服务组件
Impala由三个核心服务构成:Statestored、Catalogd、Impalad。
- Statestored 一个实例。Statestore daemon负责收集分布在集群中各个impalad进程的资源信息,各节点健康状况,同步节点信息,负责query的调度。
- Catalogd 一个实例。Catalog daemon负责接收来自Statestored的所有请求,把impala的metadata分发到各个impalad。
- Impalad N个实例。Impala daemon运行在1个或多个节点上,与Statestored保持通信,负责接收客户端的请求并返回结果。
Impala没有主节点,Statestored与Catalogd具有主节点的功能,可当作主节点,Impalad可理解为从节点。
4、优点
Impala提供对HDFS、HBase数据的高性能、低延迟的交互式SQL查询,基于Hive并使用内存计算,兼顾数据仓库、具有实时、批处理、多并发等优点。具体特点:
- 基于内存进行计算,能够对PB级数据进行交互式实时查询、分析
- 直接读取HDFS数据,完全抛弃MapReduce,省掉了作业启动的开销;借鉴MPP并行数据库的思想,省掉了shuffle、sort等开销;中间结果不落地,省掉了大量的IO开销。
- C++编写,LLVM统一编译运行
- 兼容HiveSQL
- 具有数据仓库的特性,可对Hive数据直接做数据分析
- 支持Data Local
- 支持列式存储
- 支持JDBC/ODBC远程访问
基于这些特点,Impala是CDH平台首选的PB级大数据实时查询分析引擎。
另外,Impala也有一些劣势,比如对内存依赖大、过于依赖Hive等,使用上也有其他的限制,具体限制参考官方文档。但这不足以影响Impala良好的实时查询分析特点。