基于Spark的高性能并行及分布式地理空间大数据处理技术和平台综述
引言:
我们正面临一个数据快速增长的时代。
数据获取的手段、获取的频度、数据的存储量、数据的类型、存储的方式都以前所未有的速度快速增加,而数据处理的手段和数据理解、利用的方法却相对落后,以至于陷入“信息爆炸”和“信息焦虑”的困境。对于地理空间信息领域来说,现在拥有智能手机的每个人都可以随时获取位置信息,以及位置相关的视频、图像、声音、温湿度、速度、姿态等各种信息,而卫星和无人机等设备获取的空间图像数据更是快速增长,各种物联网传感器也在每时每刻发送大量数据,迫切需要新的信息技术方法来对数据进行处理、分析和利用,为资源利用、环境保护、城市发展、灾难应急等提供有效、及时、准确的支持。
—GISpark
传统的GIS软件以(已知结构的)数据获取、存储、管理功能为主,并添加了各种时间维度和空间维度的专题图展示功能,具有空间统计、地理分区、路径分析、选址优化等空间分析方法,在城市建设、交通运输、气象预测、区域发展、决策支持等方面发挥了非常重要的作用。
但总体上来说,仍然以数据的搬运和直接展示为主,缺乏对数据的深度理解和多维度的分析方法。而且,现有的数据管理和分析算法也难以扩展到大规模的分布式并行计算系统之上,无法满足对非结构化的未知数据的探索性分析的需要,无法满足大规模数据快速处理和复杂时空关系的分析需要,无法满足大规模的数据挖掘和高级复杂模型的研究需要,也无法让更多的人参与进来,顺利开展跨领域的交叉性研究工作。
面临的挑战
- System Scalability 系统可扩展性:PB级空间数据存储系统使得各种应用程序在需要的时候高效读取。
- Interactive Performance 交互表现良好:高效的空间数据处理系统必须在用户可容忍的范围之内作出相应。
围绕以上两个挑战,本文对目前已经公布的基于Spark技术大规律空间数据的集群系统进行了文献综述,总结如下。
0.什么是SPARK
Spark是一个Apache项目,它被标榜为“快如闪电的集群计算”。它拥有一个繁荣的开源社区,并且是目前最活跃的Apache项目。
Spark技术框架图
Spark引入了一个称为弹性分布式数据集(RDD,Resilient Distributed Dataset)的概念,它是一个不可变的、容错的、分布式对象集合,我们可以并行的操作这个集合。RDD可以包含任何类型的对象,它在加载外部数据集或者从驱动应用程序分发集合时创建。
RDD支持两种操作类型:
- 转换是一种操作(例如映射、过滤、联接、联合等等),它在一个RDD上执行操作,然后创建一个新的RDD来保存结果。
- 行动是一种操作(例如归并、计数、第一等等),它在一个RDD上执行某种计算,然后将结果返回。
1.MongoDB
MongoDB 通过MongoDB Connector实现Hadoop与MongoDB的数据交换, 提高了读取运算大数据的效率。在此基础之上, 结合Spark API Niskanen实现MongoDB与Spark的结合。
2.GEOSPARK
GEOSPARK
是用于处理大规律空间数据的内存集群系统。基于Apache Spark内核,使其可以支持空间数据类型,索引和操作。关键技术点如下
- 计算框架采用 Apache Spark
- 设计基于RDD的spatial Resilient distributed Dataset(SRDD)空间数据集。例如点RDD(Point RDD)和 面RDD(Polygon) 基于SRDD开发API, 让开发者可以容易开发所需要的空间分析程序。
- 将采用网格结构组织索引SRDD 分发到多台数据实现并行计算。同时在建立空间索引时,能根据分区上SRDD的大小自动决定是否创建本地索引,从而起到优化计算时CPU/内存的利用率。
GEOSPARK为三层架构。
1.底层为Apache Spark Layer:用于数据的读写,持久化(和HDFS等其他存储的交互)
- Spatial Resilient Distributed Dataset 本层包括三个功能
- 支持各种格式的空间数据,转化为SRDD(点,线,面,多边形等)
- SRDD Partitioning 将所有载入的SRDDs 通过创建一个全局网格文件来分区,将总存储空间按统一网格划分并创立单一网格ID,将所有数据落入网格。
- SRDD Indexing 支持采用Quad-Tree和R-Tree 索引,同时对于每个SRDD都提供本地索引机制。
- Spatial Query Processing layer 主要实现空间查询。
3. 中科院测绘科学院
刘纪平等人设计一种基于分布式流式计算的空间数据处理方法与系统,主要应对大规模移动物体的事实监控,通过使用Kafka消息系统定时获取地理空间数据,转入Spark集群计算计算分析。
4. 中国科学院地理科学与资源研究所资源与环境信息系统国家重点实验室
温馨等设计了基于Shark/Spark的分布式空间数据分析框架
由2部分组成:
- 分布式计算层, 以计算性能良好的Spark作为计算引擎, 其引入了与其他分布式计算不同的弹性分布式数据集(Resilient Distributed Datasets, RDD)进行内存运算, 与MapReduce相比节省了大量的磁盘输入、输出(input/output, I/O)操作,并以Shark(Hive on Spark)作为数据仓库, 将查询语句转换为Spark上的RDD操作。
- 数据管理层, 采用空间数据库与HDFS混合的方式进行数据存储。通过在Shark中沿用Hive的StorageHandler方法, 访问除HDFS文件以外的其他数据库或文件。实现了空间数据加载,分布式空间查询,但并没有建立空间索引,效率不高。
5. GISpark
GISpark 是超图提供用于大规模地理空间信息处理与建模分析的分布式计算平台。
底层基于OpenStack云计算环境和Docker容器技术进行开发,存储采用HDFS/Ceph/MongoDB等大规模虚拟化存储系统进行时空信息的存储,能够处理大规模的矢量、影像和流式数据,能够兼容已有的GIS系统。
Spark 为其分布式并行计算框架,融合GIScript地理空间信息脚本引擎和多种开源的GIS模型库,同时集成Anaconda科学计算环境和Jupyter notebook交互计算Web界面,包含大量的经典算法和模型库,可以为时空大数据处理和时空一体化分析提供持续发展的模型系统。
在机器学习方面,集成TensorFlow和Orange等多种机器学习算法库,包含深度学习、对象识别、网络分析、自主分类、降维分析、随机森林、支持向量机等多种算法,当然也支持集成SuperMap GIS的强大地理空间数据处理和制图、可视化与地图发布服务、空间分析服务等重要能力,并能集成其它各种商业软件模块。
用户可以直接使用SUPERMAP的服务,也可以自己搭建整套平台,目前已经实现了云计算基础设备,空间数据处理载入等功能,正在开发为地理制图,空间可视化,高级空间分析和地理空间网络实时流处理等方面发展。
6. GeoMesa Spark
GeoMesa 是遵守Apache开源规则所开发的针对大规律空间分析的分布式云计算系统,主要用于管理和分析海量时空数据(物联网数据,社交媒体,轨迹和手机数据)。
GeoMesa Spark 提供了基于Spark和GeoMesa存储技术的APIs 用于空间计算,可以创建和写入RDDs。将RDD在GeoMesa中存储管理。
7. Magellan
Magellan 基于Spark 开源地理空间分析系统,利用Catalyst实现空间数据链接,基于SparkSQL实现空间查询。Pyspark 集成Python应用。支持ESRI格式的空间数据,对空间数据查询,简单空间操作(Union, Distance, Intersection, Symmetric Difference, Convex Hull, Envelope, Buffer, Simplify, Valid, Area, Length),提供Scala 和 Python API
8. SpatialSpark
SpatialSpark为我所在实验室开源项目。2014年春天开始,实验室将研究重点从单机计算转移到分布式地理空间数据的 研究上来。一个重要的原因是基于Hadoop的分布式地理空间数据引起了广泛的研究和应用兴趣。University of Minnesota (UMN) Mohamed Mokbel 研究组 (SpatialHadoop) 和Emory University Fusheng Wang 研究组(HadoopGIS,后 转入Stony Brook University)在这方面取得了很好的先期研究结果。
在仔细分析他们的源码后我的导师张健挺教授认为尽管Hadoop有较大的用户群,该系统在体系设计方面存在较大缺陷。主要问题之一是为了简化并行化的复杂度并支持容错,该系统大量使用不必要的硬盘读写。同时SpatialHadoop使用JTS,HadoopGIS使用GEOS开源软件包作为底层几何计算引擎(以判断空间关系)。JTS及其C++版本的GEOS距离其主要设计开发时期已近二十年。尽管长时间的维护在一定程度上 证了他们的可靠性,为二十年前计算机体系结构设计的算法和实现已很难在当前体系结构下获得最优化。
团队在两个方面进行了分布式地理空间数据处理研究的尝试,一是将单机并行空间索引(indexing),空间过滤 (filtering)和空间提炼(refinement)算法设计与最新大数据处理系统(如Spark和Impala)集成,另一个是从底层开发轻量级分布式执行引擎以更高效内在(native)地支持空间数据处理。
团队首先选择了Cloudera Impala开源软件作为第一个研究方向的尝试。 这主要是由于Impala的后端基于C++并开始支持基于SSE4的SIMD矢量操作(主要应用于字符串处理)和基于开源编译器LLVM的即时(Just In Time –JIT) 编译优化。这些及其它先进的特性对于我们研发一个高性能空间大数据处理引擎非常有吸引力。
在经过超过6个月全力理解Impala设计及实现后,团队终于成功地实现了预期目标并开发了ISP原型系统。实现以Impala行组(row batch)为单位,抽取其中的空间数据并实时建立空间索引以支持空间查询(包括多核CPU和GPU)。尽管Impala在一个安装实例(instance)内并不支持多核CPU,在克服了许多技术困难后我们设计并实现了基于OpenMP和Intel TBB的多线程并发实现。团队实现了一个基于Spark的地理空间大数据的处理原型系统SpatialSpark。与作为一个终端应用系统的Impala不同,Spark被设计成一个并行数据处理的开发环境。这使得基于Spark 的开发较基于Impala的扩展容易得多。
团队实验结果表明,SpatialSpark较基于Impala和GEOS的实现具有较高的运行效率。由于SpatialSpark采用基于内存的处理,基于Scala编程语言和Spark框架结构更有效地表达和执行空间操作(目前以查询为主)中的并行性,因而当集群系统内存充足的情况下,它往往具有更高的效率。
总结
可以看出,目前各个团队主要实现的均为基础设备的构建,在地理信息空间服务平台实现上,现阶段主要是对接各类空间数据,高效管理和读取是大家的重点,同时也有一些领先的团队已经着手开始空间数据的处理和分析,但是高级空间分析,地理制图空间可视化等方面仍旧是空白,而多维时空分析,机器学习框架更是今后发展的趋势。也是各个团队奋斗的目标。
我的下一步工作
- 扩展SpatialSpark以开发基于Spark的实用大数据处理系统。
- 可视化技术与地理空间大数据处理的系统集成。
- 高性能空间大数据处理系统在种业中的应用。结合本人种业大量的高级空间分析功能的需求,如何在以后的高性能空间处理技术上开发集成所需要的模型算法将是这两年的重点,初步的方向将以玉米高温热害为切入点,结合遥感和气象站点数据提取高密度可用温度数据,构建小尺度种植环境单元,利用内存计算实现高性能遥感温度反演、空间插值、叠加分析、相关分析、区域统计、空间聚类等。支撑面向玉米新品种推广的重大气象灾害多元、全方位、实时时空数据融合和模型实现。