Arrow在分布式查询引擎中的应用与研究
2021-09-09张世同
张世同
(北京云至科技有限公司南京分公司,数据服务产品研发部,南京 211801)
0 引言
近年来,大数据技术领域列式存储成为主流,现代CPU技术借助流水线技术、SIMD(Single Instruction Multiple Data)指令、向量计算,大幅提升处理性能。内存越来越廉价,借助内存提升性能成为可能。数据来源复杂,数据格式多样化,出现了复杂、嵌套数据格式。用户对数据处理效率的要求日益迫切。
以Presto、Drill、Impala、Kylin为代表的查询引擎采用MPP技术,使用SQL的方式,对底层异构的大数据存储进行访问。未来查询引擎向数据发现、数据治理、自助服务的方向发展,即让业务人员在无IT人员的参与下,可以顺利工作,从繁杂的原始数据中,发现数据、聚合数据、形成高质量的数据、发布数据服务。这时,查询引擎的查询、更新性能就变得尤为重要。
本文介绍了一种基于MPP和Arrow内存列存储的数据查询引擎ADE(Agile Data Engine)的设计和实现,ADE有效提升了查询引擎本身的性能和跨系统数据通讯效率,再结合预计算和SQL重写技术能够满足OLAP场景下常规查询和即席查询(1)常规查询在系统设计时是已知的,可以事先通过建立索引、分区等技术来优化。而即席(ad-hoc)查询是用户在使用时临时产生的,系统无法预先优化这些查询,所以即席查询也是一个重要指标的需求。
1 研究现状
1.1 分布式查询引擎的现状
分布式查询引擎的兴起,起源于Google的Dremel,随后Cloudera开源了大数据查询分析引擎Impala,Facebook开源了Presto,Hortonworks开源了Stringer,Apache基于Hadoop原生SQL的HAWQ[9],国内的Kylin、Druid等。Apache基金会的顶级项目Drill是业界比较接受的Dremel的开源实现。文献[5]将这些分布式查询引擎分为基于预计算思想的计算引擎和实时计算引擎两类。……
