Simba(Spatial In-Memory Big data Analytics)是一个基于Spark开发的分布式空间分析引擎,主打空间大数据的高spatial
join性能 。它基于Spark SQL框架进行扩展,针对空间场景进行了一系列的算法研究和工程优化,在spatial join领域相对geospark、SpatialHadoop、Hadoop GIS等空间分析引擎具有一定的优势。下面会结合simba的论文和源码详细介绍simba的架构、主要特性,并对spatial join算子的实现思路进行分析、比较和总结。
Simba最早在Dong Xie, Feifei Li等人发表在SIGMOD2016上的论文《Simba: Efficient In-Memory Spatial Analytics》中被介绍。
Simba项目的源码地址:https://github.com/InitialDLab/Simba
Simba项目的主页:http://www.cs.utah.edu/~dongx/simba/#team
图1 simba架构图
图2 query workload in simba
图1和图2是simba的架构图和查询流程, simba是通过对spark sql进行扩展来开发的。对比于spark sql流程图可以发现,它的前期流程与spark sql基本一致(parser、analyze等,simba依然采用spark sql的antlr4解析器,在上面添加了一些simba自定义的算子的逻辑),优化的部分主要在Spark Plan、Optimizer以及增加的IndexManager部分,对Spark SQL架构侵入性不强。
Simba的优化思路可以分为四个部分:1)实现多种分区器,将数据合理地划分到多个数据分区;2)实现多种索引,对应各类分区,为数据建立分区内部和基于分区范围的two-level index;3)实现了谓词下推、动态分区数计算等面向SparkPlan的优化;4)实现和优化多种Spatial Join算子,利用two-level index开发多种优化的空间聚合算法,相比于已有算法减少了计算量。后面的几篇文章会结合源码详细介绍Simba的这几项工作。