GeoSpark调研(一):简介

GeoSpark简介

GeoSpark是一个用于处理大规模空间数据的开源内存集群计算系统。是传统GIS与Spark的结合。GeoSpark扩展RDD以形成空间RDD(SRDD),并跨机器高效地对SRDD数据元素进行分区,并引入新颖的并行化空间(几何操作,遵循Open Geosptial Consortium(OGC)标准)转换和操作(用于SRDD),提供更直观的界面供用户编写空间数据分析程序。GeoSpark扩展了SRDD层以在大规模的空间数据集上执行空间查询(例如,范围查询,KNN查询和连接查询)。在Spatial RDD图层中检索几何对象之后,用户可以调用在GeoSpark的空间查询处理层中提供的空间查询处理操作。

组成结构

GeoSpark由三个层组成,结构如下图所示:Apache Spark层、空间RDD层和空间查询处理层。

 

Apache Spark层

Apache Spark层提供了基本的Spark功能,包括将数据加载到磁盘,以及reg的RDD操作。

 

空间RDD层

空间RDD层由三种新颖的空间弹性分布式数据集(SRDDs)组成,它扩展了常规的Apache Spark RDD来支持几何和空间对象。GeoSpark提供了一个几何操作系统,它可以访问空间RDDs来执行ba-sic几何操作(例如,重叠、交叉)。系统用户可以利用新定义的SRDDs来在Spark中开发空间数据处理程序。

 

空间对象支持(SRDDs)

GeoSpark支持各种空间数据输入格式(例如,逗号分隔值、标签分隔值和知名文本)。不同于用户花时间在解析输入格式上的时间,GeoSpark用户只需指定格式名称和空间数据的开始列,而GeoSpark将会自动接管数据转换,并将处理的数据存储在空间中。在存储层,GeoSpark利用JTS拓扑套件4来支持空间对象。每个空间对象都存储为一个点、一个矩形或多边形类型。就空间对象的类型而言,空间RDDs(SRDDs)定义如下: PointRDD。PointRDD支持所有的2D点对象(代表地球表面的点):h经度,纬度i。所有点在一个PointRDD中的所有点被Apache Spark层自动分割,并相应分配给机器。RectangleRDD。矩形支持矩形的ob-物体以下列格式:h点A(经度,纬度)和点B(经度,纬度)i。点A和点B在一个矩形的对角线上是一对垂直的。矩形中的矩形也被Apache Spark层分配给不同的机器。PolygonRDD。所有随机多边形对象都是由PolygonRDD进行支持的。PolygonRDD所需的格式如下:h点A(经度,纬度),点B(经度,纬度),点C,…。列的数量没有上限。Apache Spark层将PolygonRDDs划分为分布式集群。

 

SRDDs内置的几何操作

GeoSpark为空间RDDs提供内置操作。一旦空间RDD被初始化,这个空间RDD的内置操作就可以被用户使用。通过调用定义良好的API,用户可以有效地执行空间数据存储空间数据的复杂操作,并细节与这些功能有关的实现。从实现的角度来看,这些操作与Apache Spark层通过Map、Sort、菲尔、Reduce等进行交互。在这个透明的过程中,用户只关注空间分析编程的细节,而不用了解底层流程。GeoSpark提供了一组几何操作,称为几何操作库。该库支持对几何操作的原生支持,这些操作遵循开放地理空间联盟(OGC)标准。GeoSpark提供的几何操作的例子如下:
Initialize:这个操作的功能是初始化一个空间点,矩形或多边形,它支持三个常见的几何对象,点,矩形和多边形,以及相关的操作。该操作解析输入数据并将其存储为空间对象类型。数据集应该遵循相应的GeoSpark空间RDDs中所需的格式。
Overlap:在一个空间RDD中,这个opera的目标是找到所有在几何图形中与其他物体相交的内部物体。
Inside:在一个空间RDD中,这个操作可以找到所有在几何图形中包含的内部对象。
Disjoin:在一个空间的RDD中,这个操作返回所有未被分割或包含在几何图形中的对象或对象的所有对象。该操作的参数是对象或对象集的实例。
MinimumBoundingRectangle:这个操作为空间RDD中的每个对象找到最小的边界矩形,或者返回一个包含空间RDD中所有内部对象的大的最小边界矩形。
Union:在一个空间的PolygonRDD中,这个操作可以返回这个RDD中所有多边形的联合多边形。

 

SRDD分区

通过创建一个用于数据分区的全局网格文件,GeoSpark自动分区所有装载的空间RDDs。将空间RDD中的每个元素分配到相同的二维空间网格空间的主要思想是:首先,将空间空间分割成若干个相等的地理大小的网格单元,构成一个全局网格文件。然后遍历SRDD中的每个元素,并将该元素分配到一个网格单元中,如果元素与此网格单元重叠。在文件大小或数据分区中,全局网格的成本较低。另一方面,全局网格文件的构造是一个迭代的工作,需要在相同的数据集上进行多个坐标排序。为了对输入数据集进行分区,GeoSpark为所有空间RDDs执行以下步骤:
(1)从数据源加载原始数据集,转换原始数据集以提取空间信息并将它们存储在常规的RDD中。与此同时,将RDD缓存到内存中,用于下一个迭代作业。
(2)多次遍历输入RDDs中的坐标,以找到它们的最小绑定矩形。
(3)计算网格文件边界(GLB),它是两个MBRs的交点。

 

(4)通过GLB预过滤这两个数据集,去掉与其他元素不重叠的元素。这一步骤特别适用于两个空间数据集不在同一个空间并且只有一个小的交集区域的情况。

 

图中显示了一个全局网格的示例。元素、点(tweet)或多边形(状态),位于许多相同大小的网格中。网格的数量可能会影响查询性能。。全局网格构造需要通过迭代的方式来对原始数据集进行排序,以找到地理边界(最小边界矩形)。例如,在点集中进行x坐标和y坐标的排序,如果它依赖于其他的计算框架(例如,这可能是该算法中最耗时的一步。Hadoop)。然而,GeoSpark在内存特性中与Apache Spark缓存完美地抵消了这一点。GeoSpark缓存(或标准缓存)在内存中的目标数据集同时执行第一次排序。下一个对缓存的排序只需要花费毫秒的时间。

 

空间查询处理层

空间查询处理层有效地执行SRDDs上的spa-查询处理算法(例如,空间范围和连接)。GeoSpark自适应地决定是否需要在本地创建一个空间索引,从而在集群的运行时性能和内存/cpu利用率之间达到平衡。广泛的计算表明,与基于hadoop的数据处理应用程序相比,GeoSpark在性能(具有合理的内存/cpu利用率)上实现了更好的运行时性能。

 

执行模型

下图给出了遵循GeoSpark的通用执行模型。为了加快空间查询的速度,GeoSpark控制杆将网格分区的空间RDDs、快速内存中的计算和Apache Spark的DAG调度程序进行并行化,从而将查询执行并行化。空间查询处理层也提供了像Quad-Tree和r-tree这样的空间索引。空间查询算法尽可能避免类似的任务。正如我们前面提到的,减少类似任务可能导致跨集群的数据转移,而数据转移在时间和资源方面都很昂贵。用户指定GeoSpark是否应该考虑本地的空间索引。一方面,GeoSpark可以根据索引开销(内存和时间)和查询选择性之间的权衡,另一方面的空间对象的数量来决定是否为某个SRDD分区创建本地空间索引。因为索引是构建中额外的开销,所以GeoSpark会执行一个完整的空间对象扫描或嵌套循环(以防连接),因为有些SRDD分区只有很少的空间对象。这个执行模型有以下优点:
有效的数据分区:在SRDD数据被划分后,只有元素位于相同的网格中,需要计算空间关系。集群不需要花时间在不同网格单元上的空间对象上,它们保证不会相交。

 

可用的本地空间索引:元素位于同一个网格中,GeoSpark可以动态创建本地空间索引,如Quad-Tree或r-tree。基于索引的空间查询可能比基于扫描的或嵌套循环算法具有更高的效率。

 

 

空间范围查询

 

范围查询可以绕过不必要的开销,并保持算法的整洁和高效。空间索引也可以提高查询性能。GeoSpark在以下步骤中实现了空间范围查询算法:
1.将查询窗口广播到集群中的每台机器,并在必要时为每个空间RDD分区创建一个空间索引。
2.对于每个SRDD分区,如果创建了一个空间索引,则使用查询窗口来查询空间索引。否则,检查查询窗口和SRDD分区中的每个空间对象之间的空间谓词。如果空间谓词保持真值,则算法将空间对象添加到结果集。
3.删除由于全局网格划分阶段而存在的空间对象副本。

 

4.将结果返回到spark program的下一个阶段(如果需要),或者将结果集持久化到磁盘。为了更好地理解GeoSpark空间范围查询,DAG、数据流和编程流都是在下图中被确定的。正如数据流所示,GeoSpark在没有数据流的情况下并行处理数据,以获得更好的性能。

 

空间连接查询

 

正如前面提到的,为了加速空间连接查询的速度,几乎所有的算法都创建了一个空间索引或网格文件。然而,空间连接操作通常会多次迭代原始数据集,以拥有一些全局参数,比如边界或空间布局。这个过程是常规和耗时的。由于Apache Spark的内存计算特性,迭代作业的效率可以得到显著提高。因此,GeoSpark中的空间连接查询可以获得更好的性能。

 

GeoSpark实现了下图所提出的并行连接算法。该算法首先对两个输入SRDDS中的空间对象进行遍历。如果空间对象位于一个网格单元内,则该算法将网格ID分配给该元素。如果一个元素与两个或多个网格单元相交,则复制该元素并将不同的网格id分配给该元素的副本。然后,该算法通过它们的键连接这两个数据集,它们是网格id。对于具有相同网格ID的空间对象(来自两个SRDDs),该算法计算它们的空间关系。如果两个SRDDS的两个元素重叠,算法就会将它们保存在最终结果中。然后算法将每个矩形的结果分组。分组结果如下:矩形、点、点、点。最后,该算法删除了重复的点,并将结果返回到Spark DAG中的其他操作,或者将最终结果保存到磁盘。

 

最小化数据混乱:GeoSpark在降低数据处理规模方面付出了大量努力,以实现更好的性能。在GeoSpark的空间连接算法中,数据转移出现了两次。它们是由Join和Group-ByKey造成的,如下图所示的DAG执行图中所示。这两个数据转移操作是可避免的。然而,在他们之前,由GeoSpark执行的过滤器所执行的过滤操作已经大大减少了数据的移动。实际上,当缓存的空间RDDs为MBRs排序时,会出现另一个小的数据转移。它不包含在这个图形中,因为它不改变数据,并且对主数据流没有影响。


该文章这部分大部分翻译自关于geospark的论文。所以归类为翻译。


写在最后:这是我之前做的一些技术初步调研,主要目的是了解和展示一些技术,并进行了一些个人总结,其中必然有疏漏。其中引用了不少论文,百科和他人博客,但因为时间太久大都忘了出处,如果侵权提示后删除

 

  • 3
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值