我们用Impala有2年多了,虽然也有很多坑,但是和 presto, pinot, spark sql等相比,确实是查询性能最快的(注意,我单单说的是查询性能)。Impala最大的问题在于catalogd是个单点,元数据多了后会遇到各种问题。
本质上,Impala是一个MPP engine,各节点不共享资源,每个executor可以独自完成数据的读取和计算,缺点在于怕stragglers,遇到后整个engine的性能下降到该straggler的能力,所谓木桶的短板,这也是为什么MPP架构不适合异构的机器,要求各节点配置一样。
Spark SQL应该还是算做Batching Processing, 中间计算结果需要落地到磁盘,所以查询效率没有MPP架构的引擎(如Impala)高。不过最近可以看出Spark的重点都在Spark SQL,因为它已经不仅仅是SQL了,而是新的 "spark core"。(详见最后链接中Reynold Xin对此的解释)Spark SQL is not just about SQL. It turns out the primitives required for general data processing (eg ETL) are not that different from the relational operators, and that is what Spark SQL is. Spark SQL is the new Spark core with the Catalyst optimizer and the Tungsten execution engine, which powers the DataFrame, Dataset, and last but not least SQL.
另外,Reynold Xin 在这篇blog的评论区和作者展开了深入的“讨论”。(讨论内容也和本问题直接相关)