Impala
Cloudera开源的一款用来进行大数据实时查询分析的开源工具,它能够实现通过SQL语句来操作大数据,数据可以是存储到HDFS、HBase或者是Kudu中的
1. 简介
Impala 是由Cloudera受到Google的Dremel启发下开发的实时交互SQL大数据查询工具,它以C++实现,整体采用跟GP一样的MPP(Massive Parallel Processing)架构,Impala在发出了paper 《Impala: A Modern, Open-Source SQL Engine for Hadoop》。Impala是一个内存计算模型,在计算时会把计算尽可能的放入内存中,Impala官方建议内存要至少128G以上,并且把80%内存分配给Impala。
在实际各种生产环境实践中,Impala也被认为不能完全替代Hive,Hive适合于长时间大数据量的查询分析,而Impala适合于实时Ad-Hoc SQL查询(跟GP场景高度重合,详见Cloudera宣传页,CDH自己也是对标GP的。Tuning Impala_ The top five performance optimizations for the best BI and SQL analytics on Hadoop Presentation.pdf)。
2. Benchmark
MR3(韩国浦项大学推出的一个调优后的MR框架)用TPC-DS跑了一个10TB数据量大小的Benchmark,对比了Hive、Presto以及Impala
表格中飘红的单元格表示查询失败了
https://mr3.postech.ac.kr/blog/2019/03/22/performance-evaluation-0.6/
通过这个Benchmark我们可以看到Impala在一些场景下会比Hive快很多,但是在大数据量情况下表现不是很稳定(这也跟基于内存计算有关)
3. 架构要点
Impala的架构设计视图,如图所示:
上面可以看出,位于Datanode上的每个impalad进程,都具有Query Planner、Query Coordinator、Query Exec Engine这几个组件,每个Impala节点在功能集合上是对等的,也就是说,任何一个节点都能接收外部查询请求。当有一个节点发生故障后,其他节点仍然能够接管,这还要得益于,在HDFS上,数据的副本是冗余的,只要数据能够取到,某些挂掉的impalad进程所在节点的数据,在整个HDFS中只要还存在副本(impalad进程正常的节点),还是可以提供计算的。除非,当多个impalad进程挂掉了,恰好此时的查询请求要操作的数据所在的节点,都没有存在impalad进程,这次Query就会失败。