总结
数据湖概览
数据湖采用开放存储(如HDFS、Ozone等)和开放文件格式(如Parquet、ORC等),并支持开放表格式(如Iceberg、Hudi等)。企业级数据湖具有丰富的安全集成(如Kerberos、Ranger等)和广泛的应用(客户数>1400,集群规模>500节点)。
Impala简介
Impala是一款面向交互式查询的SQL查询引擎,采用MPP架构和C++内核,支持多种外部存储和文件格式。Impala提供Web UI用于查询监控、计划可视化和查询时间线展示。Impala发布历史表明,新版本(如4.3.0计划中)能提升性能。
数据湖查询引擎的挑战
数据湖查询引擎面临开放性(数据源、格式多样)、数据位置不可控等挑战,但可通过谓词下推、预聚合、JIT Codegen等优化提升性能。
Iceberg–OpenTableFormat
Iceberg通过文件保存元数据,支持分区、快照和事务,提升表结构的灵活性。Impala支持读写Iceberg V1/V2表,并实现快照操作和查询历史版本。
Impala on Iceberg优化
- Iceberg V2读优化:通过区分datafiles和deletefiles,使用Unionall连接结果,以及优化AntiJoin操作,提升读性能。
- count(*)优化:利用快照统计信息优化简单count(*)查询,对V1和未删除的V2表有效。
- Manifest文件缓存:通过Caffeine缓存Manifest文件,减少重复读取,提升计划生成效率。
Codegen相关优化
- Impala中的Codegen:基于LLVM编译查询执行程序,优化Operator和表达式代码,但小数据集上可能因编译时间长而性能下降。
- AsyncCodegen:在异步线程执行Codegen,减少小查询的编译延迟。
- CodegenCache:缓存相同fragment的查询,缓解小查询的性能回退。
未来展望
- Iceberg相关:优化V2表读性能,支持DELETE/UPDATE操作,以及SELECT查询元数据。
- Codegen相关:扩展Codegen应用范围,优化内存和可见性。
欢迎交流
邮件列表:user@impala.apache.org, dev@impala.apache.org