CG_Hadoop:基于MapReduce的计算几何

摘要:Hadoop使用了MapReduce编程范式,目前已经被公认为是分布 式环境中分析大数据的标准框架。然而,它并不能很好的应用于大规模的计算几何处理。本文介绍的CG_Hadoop是一套可伸缩的和高效的 MapReduce算法,用于处理各类基本计算几何问题,例如多边形合并、skyline(轮廓线)、convex hull(凸包)、farthest pair(最远相对)以及最近相对等,这些都是其它几何算法的基础。对于每个计算几何操做,CG_Hadoop有两个版本,一个基于Apache Hadoop系统,一个基于SpatialHadoop系统。CG_Hadoop更适合空间操做。这些提出的算法造成了一个全面的计算几何操做 MapReduce库。大量的实验结果代表CG_Hadoop达到了29倍和260倍,比使用Hadoop和SpatialHadoop都具备更好的性 能。试验采用25台机器组成的集群,数据集大小为128GB。java

一、引言

Hadoop[17]是在分布式环境下高效处理大量数据的一个框架,采用了MapReduce编程范式,是经过两个函数,即Map和Reduce, 进行的并行程序。Map函数将单一数据记录映射为一组key/Value组对<k,v>,而Reduce函数是将同一Key值的全部 Value中取出并产生最终结果。MapReduce范式的简便性和灵活性使得Hadoop可以应用在一些大规模的应用中,如机器学习[13],兆字节文 件排序[29]以及图像处理[14]等。算法

与此同时,随着设备和应用程序的大量出现,也产生了巨量的空间数据,例如智能手机、空间望远镜[6]和社交工具[28,35]等。如此大量的空间数 据须要充分利用MapReduce编程范式[11]的优点去解决各类空间操做。在计算几何算法中,最重要的空间操做就是对空间范围内的几何实体进行表达和 操做。这些操做包括:多边形合并、skyline(轮廓线)、convex hull(凸包)、farthest pair( 最远相对)以及最近相对等。这对这些问题尽管已经存在了不少优秀的计算几何算法,可是,这些算法并不能很好的处理包含数亿点的现有空间数据集。例如,计算 4亿个点数据集的凸多边形,若是采用传统的方法可能须要花费三个小时,计算合并500万个多边形须要花费1个小时,对于更大的数据集可能会出现内存溢出, 计算失败。数据库

本文介绍的CG_Hadoop,具备一系列可伸缩并且效率高的MapReduce算法用于解决各类基础计算几何问题,如polygonunion, skyline ,convex hull,farthest pair, and closest pair等,这些算法都是其余几何计算的基础[5,33]。CG_Hadoop与传统的计算地理算法相比,在处理大尺度空间数据时表现更好的性能。针对每 一个计算几何算法,本文都介绍了CG_Hadoop的两个版本,一个基于Apache Hadoop系统部署[17],另一个基于开源的SpatialHadoop进行部署[12]。前者是一个开源的MapReduce项目,已经普遍应用 于MapReduce应用[9,13,14,19,20,29]。后者是一个基于Hadoop系统进行了封装,采用了空间索引,使其更适合空间操做。编程

在CG_Hadoop中全部算法的主要思想是充分利用许多计算几何算法分而治之的思想。分而治之的特性适合MapReduce环境,该环境是在一个 计算机器集群中多个节点并行处理。所以,在MapReduce环境中,CG_Hadoop必须适应传统计算算法来更好的工做。例如,不想传统算法那样将输 入数据一分为二进行屡次计算,而CG_Hadoop将输入划分为更小的组块,确保在每个MapReduce中都被计算出结果,这样对于Hadoop和 SpatialHadoop来讲都比较适合。另外,本文采用了SpatialHadoop中分布式空间索引,经过先将输入分块但不会影响计算几何操做的结 果,只要有可能,加快计算的速度,。数据结构

CG_Hadoop是SpatialHadoop(http://spatialhadoop.cs.umn.edu/)可用代码的一部分,造成了 计算几何操做中综合MapReduce的核心部分。CG_Hadoop具备开源性质,将做为一个研究载体供其余研究者创建更多的基于MapReduce编 程范式的计算几何算法。实验环境使用25台机器的一个集群,真实数据和合成的数据多达128GB,实验代表基于Hadoop和SpatialHadoop 的CG_Hadoop比传统的算法达到了29倍和260倍,都具备更好的性能。框架

本文剩余内容组织以下。第二节简单介绍了所需环境。从第3节到第7节分别介绍了基于MapReduce的各类算法操做,包括多边形合并,Skyline,凸多边形,最远组对和最近组对。第8节进行了实验评价。第9节进行了讨论。最后一节是本文的结论。机器学习

二、背景

本章节给出了关于Hadoop和SpatialHadoop两个系统的背景信息。CG_Hadoop中一系列的计算几何操做同时在这两个平台上使用。分布式

2.1 Hadoop

Hadoop[17]是一个基于大集群进行数据处理的开源框架。一个Hadoop集群包含了一个主节点和几个从节点。主节点存储文件的元信息(如名 称和访问权限等),而从几点存储了文件中实际的数据(如记录等)。一个文件在处理以前,通常是被切分为64M(称之为块)的大块,而后加载到Hadoop 分布式文件系统(HDFS)上。主节点将跟踪文件如何被分块和每一块存储的位置,而从节点存储数据块。类比普通的文件系统,主节点存储文件配置表和索引节 点,从节点存储文件数据。函数

MapReduce程序配置一个MapReduce工做并将其提交给主节点。一个MapReduce工做包含一系列配置参数,如Map函数和输入文 件等。主节点将这个工做分为几个Map任务,而后分解这些任务并在每个从节点上执行每个任务。这也将输入的文件分块,而后分配每快给一个从节点去做为 一个Map任务去处理。Map任务经过配置的记录读取函数解析配置块,而后生成一系列的Key-value组对<k1,v1>,这些组对会通 过Map函数生成一系列中间组对<k2,v2>。中间组对经过K2进行分组,而后reduce函数收集全部同一关键值的中间记录,而后通过处 理生成最终记录<k3,v3>集,并将其存储在HDFS文件中。工具

MapReduce和Hadoop已经被许多主流的公司使用,如Google[11]、Yahoo![9]、微软的Dryad[19],以及 Twitter[20]。同时在一些大规模的应用中也很受欢迎,如机器学习[13],兆字节文件排序[29]以及图像处理[14]等。

2.2 SaptialHadoop

SpatialHadoop是基于Hadoop的一个全面扩展,可以实现空间操做的高效处理。重要的是,SpatialHadoop在Hadoop 存储层提供了两层空间索引,实现了基于格网文件[26]、R-tree[16]索引。丰富了MapReduce层,嵌入了两个新的组件,在该层容许使用空 间索引。SpatialHadoop经过创建索引来提升一些空间操做的算法效率。

SpatialHadoop的空间索引包括一个全局索引和多个局部索引。全局索引经过集群节点数据划分数据,而局部索引在每个节点内部组织数据。 在MapReduce层新嵌入的组件经过全局和局部索引来修剪文件的分区和记录,但不会影响操做结果。修剪的标准取决于用于定义的过滤功能,这个能够经过 MapReduce程序来提供。

2.3 计算几何操做

正如上文所述,CG_Hadoop造成了计算几何操做的全面MapReduce库的核心部分。目前,CG_Hadoop包括5个基础的操做,即合并、Skyline、凸多边形、Farthest pair、和closest pair。下面对他们进行简单的定义。

\

 

合并:对一组多边形集合S进行合并,就是集合S中至少一个多边形内部全部点集合,仅仅保留全部点中的边界点,删除内部的全部点。图1(a)给出了一个示例对输入的多边形进行合并做为一组压缩代码区域,图1(b)是合并的结果。

Skyline(轮廓):例如图1中的点集合P。若是点Pi的坐标至少在一个维度(纵坐标或横坐标)不小于Pj的坐标,那么Pi在点P集合中就主导点Pj。点集合P的轮廓线是有这些主导点构成的(如图1(d))。在计算几何领域,轮廓线一般被称之为最大点集合[33]。

ConvexHull(凸包):一个点集合P的凸包是指包含这些点的最小凸多边形,如图1(e)所示。凸包操做的输出就是全部点按照顺时针的方向造成凸包(MRB)。

FarthestPair:给定一组点P,最远组对是全部点对中,两点之间的欧几里得距离最大的一对点。如图1(e)所示,最远的一对点在凸包上。

ClosestPair:给定一个组点P,最近组对是全部点对中,两点之间的欧几里得距离最小的一对点。如图1(e)所示。

三、合并

传统算法为多边形合并操做[33]计算两个多边形的合并经过计算全部边缘交叉,删除全部内部部分,仅留下周边的部分。对于两个以上的多边形合并,首 先合并两个多边形,而后与下一个多边形合并直到全部的多边形都合并成一个多边形。PostGIS[32]中,经过如下SQL查询语句来执行这个操做,每一 列geom存储了每个ZIP代码的多边形信息。

SELECT ST_Union(zip_codes.geom)FROM zip_codes;

\\

 

本节介绍了基于Hadoop和SpatialHadoop的两个多边形合并算法。以图1(a)中的数据集做为输入。为了便于说明,同时保持表明性,实例中的多边形不存在重叠现象。

3.1 Hadoop中的合并

Hadoop中多边形合并算法核心思想是容许每一台机器累加多边形的子集,而后让一台机器将全部机器的结果都收集起来并计算出最终答案。算法步骤如 下:分区、局部分区和全局分区。第一步分区是将输入的多边形分为更小的子集存储在每一台机器上。该步骤由Hadoop加载文件命令执行,能够将文件划分为 64MB大小的组块存储在每个从节点上。第二步是创建局部索引。每一台机器经过传统的内存中多边形合并算法计算该机器上多边形合并。由于每个数据块最 大为64MB,因此内存算法实现跟输入文件的大小无关。这些步骤做为一个联合功能再Hadoop中实现,运行在每一台机器中。当执行完局部合并以后,每一 台机器会生成一组多边形做为该机器上分配的全部多边形的合并结果。全局合并在Hadoop中是以reduce功能来实现的,这个过程是在一台机器上计算最 终的而结果。Reduce函数取出全部局部计算的合并结果,而后合并成一个,对他们再经过传统的内存计算算法进行合并。每一台机器最终将生成只有几个多边 形,这样可使用内存算法进行多边形合并。

经过充分利用并行机器的优点,而不是在一台机器上完成全部的工做,本文提出的算法与传统的算法相比具备明显的优点。尽管将数据分配到每台机器上,再 从每一台机器上搜索结果都会有所开销,这样的开销能够经过并行机器的成本抵消掉,并且也能够用来处理更大尺度的空间数据集。对于更感兴趣,并且也比较熟悉 MapReduce编程范式的读者,附件A.1.给出了基于Hadoop的多边形合并算法的源代码。

图2给出了图1(a)的输入数据集经过四个集群计算节点进行分区和局部合并的过程,四个节点每个多边形分配到一个节点。决定哪一个节点属于哪一个分区彻底取决于Hadoop负载文件组件,基本上是随机分配多边形到每个节点上。

经过图中的结果,能够发现分配到一个节点的多边形合并后彻底保持独立。在这种状况下,素有的多边形都做为输出结果。而后,全部节点的输出结果将经过一个单独的机器进行计算得出最终的答案,如图1(b)所示。

3.2 SpatialHadoop中的合并

SpatialHadoop中多边形合并算法和Hadoop中的算法具备同样的三个步骤。惟一不一样的地方是在SpatialHadoop中进行数据 集分块含有一种空间思想的行为,如图3所示,相邻的多边形被分配在了一台机器上。这主要是由于在SpatialHadoop中利用了潜在的空间索引结构去 为每一个节点分配多边形。尤为是,在SpatialHadoop中采用R-tree索引,每个R-tree节点的大小为64MB,每个集群节点存储每一 个R-tree节点中的全部条目。所以,根据定义,每个R-tree节点提供一簇相邻的多边形,特别是,在SpatialHadoop中全部R- trees批量加载也可以保证同一个节点上的全部多边形是相邻的。

尽管局部和全局合并步骤同样,但在SpatialHadoop中变的更加简洁。其局部合并一般生成输出一个多边形,而在Hadoop中每每输出多个 多边形。在本文的实例中,经过Hadoop的局部合并后生成了28个多边形,而在SpatialHadoop中仅仅生成了4个多边形,这就使得最终的算法 计算的更快。SpatialHadoop中多边形合并算法的源代码彻底和Hadoop中同样(附件A.1.)。

四、Skyline(轮廓线)

传统的内存中二维轮廓算法是采用分而治之的思想,首先将全部点按照X坐标进行排序,并经过一条垂直线将全部点分为两个大小相等的子集。每一半的轮廓 经过递归计算,最终的轮廓线经过二者合并计算获得。合并两条轮廓线,左边轮廓线的点按照非递减X顺序进行扫描,也就是按照非递增Y顺序进行扫描,每个都 和右边轮廓线最左边的点进行比较。一旦左边轨迹线的点占优点,那么就删除掉左边轮廓线上的全部后续点,两条轮廓线上剩余的点连接在一块儿。在数据库管理系统 中是不支持轮廓线操做符的。然而,在数据库中这些主要基于磁盘的算法具备很是大的意义(例如[7, 31])经过非标准SQL查询。

SELECT * FROM points SKYLINEOF d1 MAX, d2 MAX;

本节介绍了两种轮廓线算法,一种基于Hadoop,一种基于SpatialHadoop。以图1(c)中的数据为输入数据集。

4.1 Hadoop中的Skyline

本文Hadoop中的skyline算法是传统分而治之skyline算法的一种演变[33],是将输入的数据划分为多个(多于两个)部分,每一部 分能够经过一台机器来处理。经过这样的方式,输入的数据经过全部机器须要一次被划分,确保结果可以在一次MapReduce迭代过程当中获得。相似于 Hadoop多边形合并算法,Hadoop轮廓线算法分为三步来执行:划分、局部轮廓线和全局轮廓线。划分步骤将输入的数据集划分为64MB大小的更小组 块,并将它们分配到每一台机器上。局部轮廓线步骤是指每一台机器经过传统的算法计算本机器上的数据组块轮廓线,仅输出非主导地位的点。最终经过全局轮廓线 步骤,一台机器收集全部局部轮廓线的点,而后计算这些点的最终轮廓线。值得注意的是,不可以经过内存算法来进行合并这些局部轮廓线,由于局部轮廓线不是通 过一条垂直线进行分开的,实际上他们之间有可能重叠。经过Hadoop划分数据块是随机划分的,并无考虑数据之间的空间位置。全局轮廓线步骤计算最终的 结果,经过传统的轮廓线算法将局部轮廓线中的全部点合并成一个要素集。熟悉MapReduce编程的用户能够参考附件A.2的源代码。

该算法容许多台机器进行独立并行运算,大大提升了轮廓线计算效率,同时也减小了输入要素集(全局计算时)的大小。对于n个点大小的均匀分布的数据 集,大约在轮廓线上的点的数量是O(logn)[4]。在实践中,一个64MB大小的分区大约有7000000个点,轮廓线中真实的和统一辈子成数据集仅仅 包含几十个点。考虑到这些数据量比较小,也适合将全部收集的点再一台机器上进行单独的计算得出最终的结果。

4.2 SpatialHadoop中的Skyline

SpatialHadoop中Skyline算法与前面描述的Hadoop算法很是类似,但也有两个主要的变化。首先是在划分阶段,后者采用了 SpatialHadoop划分器当数据加载到集群时。这样确保了会根据一个R-tree索引进行划分,而并非随机划分的,这就意味着每台机器上生成的 轮廓线是没有重复的。其次,在局部轮廓步骤以前采用了额外的过滤步骤。过滤步骤在主节点上执行,须要输入全部分区的R-tree索引单元的最小外包矩形 (MBRS),并清除这些单元,但并不会影响最终轮廓线的结果。

新过滤步骤的主要思想是若是在Ci中至少有一个点主导Cj中全部的点,那么Cj能够删除,单元Ci主导另一个单元Cj。如图4所示,因为C5左下 角主导了C1中右上角,则C5主导了C1。轮廓线支配关系的传递性意味着在C5中的全部点主导C1中的全部点。同理,C6主导C4,C6的左上角主导了 C4的右上角。这就是说C6上边缘的点主导了C4左上角的点,所以主导了C4中全部的点。由于一个单元的边界是最小的(由于R-tree分区),全部每一 个边界至少有一个P中的点。相似于C2主导了C3。所以在过滤步骤中删除方法是经过一个嵌套循环一块儿测试每一对的细胞Ci和Cj。经过对比Cj的右上角和 Ci的左下角、右下角以及左上角。若是任何一个角主导了Cj的右上角,就在下一步对比中删除Cj,不发给任何一个节点。所以,对局部skyline不进行 计算,也不认为他在全局轮廓线这个步骤中。

\

值得须要注意的是,在Hadoop中应用过滤步骤不会有多大的影响,由于在Hadoop中使用的分区方案针对不一样的单元不会产生如此分割的 MBRs。基于SpatialHadoop轮廓线算法比相应的Hadoop算法具备更好的性能,由于过滤步骤减小了许多不须要处理的单元。感兴趣的读者可 以参考附件A.2过滤步骤的源代码。

五、凸包(CONVEX HULL)

图1(e)中所示的凸包采用Andrew’s Monotone Chain算法对两个链进行合并计算。说先,它将全部点按照x坐标进行排序,并标识最左边和最右边的点。而后,凸包的上链经过检查每三个连续点 p,q,r,反过来,从左到右。若是三个点是逆时针反向,而后,当中间点q不是上链的一部分,它是被跳过的,而后算法将考虑P,r,s三个点,r是成功的 一个点。不然,算法继续检查下三个连续的点q,r,s。一旦到达最右边的点,算法经过一样的方式继续计算更低的链,来检查P中全部点,从右到左,并作相同 的检查。采用PostGIS[32],凸包,能够经过单独的SQL语句ST_ConvexHull功能来实现。因为这个函数须要一个记录做为参数,因此, 这些点必须先经过ST_Makeline功能将其组合成一行字符串。

SELECTST_ConvexHull(ST_Makeline(points.coord)) FROM points;

本节中,介绍了两种凸包算法,一种是基于Hadoop,一种是基于SpatialHadoop。图1(c)中的数据集做为案例的实验输入数据。

5.1 Hadoop中的凸包

Hadoop中的凸包算法与其中的轮廓线算法很是类似,首先须要进行分区,将输入的数据划分为更小的数据块,每一块都适合进行内存计算。而后,每一 个子集的局部凸包采用传统的方法进行内存算法计算[3],只保留造成凸包的点。这些凸包上的全部点将在一台单机上进行全局凸包计算,经过传统的内存凸包算 法生成最终结果。与轮廓线很类似,凸包上点的个数估计为全部的数据的O(logn)[10],使得在计算局部凸包时,删除大多数点算法很是高效,而且容许 全局凸包在一个节点上进行计算。

5.2 SpatialHadoop中的凸包

Hadoop中凸包算法没有必要处理更多文件分区。直观地说,文件的中心部分不影响结果。SpatialHadoop中,经过提早删除一些分区从而 提升了凸包算法并且也不影响结果。核心的思想是凸包上的任何点都必须是数据集(大大、小大、大小和小小)的四个轮廓线中的至少一个的一部分[33]。一个 大/小-大/小轮廓线考虑最大/最小点在x-y维是首选。这个属性容许重用的4.2节中轮廓线过滤步骤。如图5所示,应用轮廓算法四次去选择分区,四个轮 廓线所须要的,并将它们素有这些分区做为一个去处理。显然,一个分区,不影响四个轮廓线的任何一个,也不会影响最终的结果。一旦要处理的分区被选择后,算 法将经过计算每个分区的凸包,相似于5.1小节的Hadoop算法,而后在每台机器上计算局部凸包,再计算全局凸包。SpatialHadoop算法的 获取来源于空间意识分区方案,这样容许在过滤步骤中进行数据修剪,所以在局部和全局进行凸包计算时能够节约成本。感兴趣的读者能够查看附件A.3中。

\

六、最远组对

最远组对的很好属性是这两个点组成的组对必须落在全部点的凸包上[34]。这个属性能够经过首次计算凸包加速最远组对操做,而后经过旋转卡尺算法扫描凸包来查找最远组对[33]。在本节中,将介绍Hadoop和SpatialHadoop中最远组对算法。

6.1 Hadoop中最远组对算法

本节首先主要讨论基于Hadoop的旋转持卡方法[33]计算凸包算法。而后经过一台单独的机器对凸包上全部点进行扫描,这在凸包上全部点的个数上 多是个瓶颈。在这种状况下,最好是开发一个基于并行处理的最远组对算法来实现Hadoop算法,这种方法是计算每个可能的点对中两点之间的距离,并选 择其最大值。对于大文件蛮力强迫方法代价较高,然而,若是在旋转卡方法下不适合一台机器从凸包的点中去计算最远组对,这个时候可使用该方法。总的来讲, 蛮力强迫和旋转卡尺的方法在Hadoop中实现具备各自的缺点。

6.2 SpatialHadoop中最远组对算法

SpatialHadoop中的算法工做模式与轮廓线和凸包算法相似,也分为四个步骤,即分区、过滤、局部最远组对和全局最远组对。在分区阶段,主 要采用SptialHadoop分区方案。在过滤步骤中,采用了专门的规则过滤。主要的思想如图6所示。对于单元中的每一对组对,Ci和Cj,计算他们之 间最小(最大)距离最为pi∈ci和pj∈cj(图6(a))中任意两点之间可能最小(最大)的距离。而后,鉴于两个单元组对C1 =<c1, c2>和 C2 = <c3, c4>,若是C1中的最小距离不小于C2中的最大距离,那么咱们就说C1主导C2。在这种状况下,C2的组对将被删除,由于他的数据集中不包含最远 的组对。如图6(b)所示,C1中最远的组对必须有一个距离大于C2中最远的组对。在这种状况下,<C3,C4>单元中的组对将不影响最终结 果,所以在下步处理过程当中将不予考虑。

\

 

一旦全部主导的单元组对都处理完毕后,算法将经过寻找局部凸包为每个备选的单元组对计算局部最远组对,而后应用旋转卡尺算法计算结果[33]。重 要的是要注意,当每个组对的大小是有界单元大小的两倍时,经过内存算法计算局部凸包是可行的。最终,算法经过收集全部局部最远组对并选择出最远距离的组 对,计算出全局最远组对。对于感兴趣的读者,最远组对算法如附件A.4所示。

七、最近组对

任何数据集中最近组对(图1(e))均可以经过分而治之的算法[25]。这种思想是将全部点按照x坐标进行排序,而后基于中位数,将点分为两个子 集,P1和P2,大小大体至关,在每一个子集中经过计算最近组对。基于找出的两个最近组对,算法将计算P1中的p1全部点的最近组对和P2中的最近组对,他 们之间的距离比两个已经存在的更小。最终,算法返回三个组对中最优组对。本节介绍基于Hadoop和SpatialHadoop的最近组对算法。

7.1 Hadoop中最近组对算法

在Hadoop中采用以上描述的分而治之的思想是很是珍贵的。首先,它须要整个数据集进行与分类,就其自己而言,它须要两轮 MapReduce[29]。此外,合并的要求对通过排序的坐标点进行随机访问,这在Hadoop文件系统中是一个众所周知的瓶颈。一方面,采用 Hadoop默认的加载去划分数据,并在每个分区中计算局部最近组对(相似于最远组对算法)可能致使交叉结果。这是由于数据划分是随机的,这就觉得这在 在不一样分区的两个点多是最近的组对。最后,在5.1章节提到的最远组问题,蛮力的方法能够解决,但对于大文件还须要更多的计算。

7.2 SpatialHadoop中最近组对算法

在SpatialHadoop中最近组对算法采用了传统最近组对分而治之算法[25]。算法分为三个步骤,划分、局部最近组对和全局最近组对。在划 分阶段,输入数据集是经过SpatialHadoop加载,如图7所示将数据划分为多个单元。每个分区的大小只有64MB,算法经过传统分而治之的思想 对每一个单元中局部最近组对计算,而后返回两点造成一个组对。另外,算法也必须返回全部候选点,当加上从邻近的单元点,经过这些候选点可能产生更近的一对。 从图7能够看出,假设C1中最近的组对距离为&1,在C1周围作内部缓冲区,半径为&1,而后返回缓冲区内全部点做为候选点,其余的点都 能够删除。值得注意的是,造成最近组对的两个点然会的比较早,并且不受删除步骤的影响。例如,每个单元Ci在单元内部可能具备基于最近组对的不一样缓冲区 大小&i。对于计算全部缓冲区来讲,尽管全部&中最小值多是最好的值,但它不可以使用,由于MapReduce框架强制全部的Map任 务是独立工做,这就使得框架在调度任务的时候更灵活。最终,在全局最近组对计算步骤中,从全部单元返回的全部点将在一台机器上进行计算,经过传统分而治之 算法计算最近组对ˆp,ˆq。

为了使得算法正确,单元必须不可以重复,采用SpatialHadoop划分方法获得的单元可以确保。这样确保了点p被移除,没有其余任何点更近比 同一单元的距离。不然,若是单元重叠,重叠区域点p可能比其余点离点q更近,所以就会没有点被删掉。对于熟悉MapReduce范式的读者,能够查看附件 A.5源代码。

八、实验设计

本节将经过实验来研究CG_Hadoop的效率和性能。Hadoop和SpatialHadoop均是采用Apache Hadoop1.2.0和java1.6。全部的实验在拥有25节点的学校内部集群上执行。机器的硬盘大小从50GB到200GB不等,内存是2GB到 8GB不等,处理速度范围是2.2GHz到3GHz。单台机器实验室用2TB的硬盘,16GB的随机存取存储器和8核的3.4GHz处理器。

\

 

实验数据分为三类:(1)OSM1:从OpenStreetMap上提取的数据集[30]包含164M的多边形(如湖泊和公园),总大小为 80GB。(2)OSM2:从OpenStreetMap上提取的数据集包含全球17亿个点数据(如路口和兴趣点),总共大小为52GB。 (3)SYNTH:在1M*1M的单元内采用不一样分布如均匀、高斯、正相关、负相关和循环等(见图8)随机生成的合成数据集。均匀和高斯是模拟许多真实现 实系统应用最普遍的分布。正相关和负相关是用来计算轮廓线最优的案例。循环数据专门用于最远组对操做,产生的凸包是很是大,不容易进行计算。最大的数据集 大小有128GB,包含3.8亿个点。

本文采用全部执行时间做为主要的性能指标。有时,若是操做运行出现内存溢出,或数据太大致使不一样算法之间的差别不容易区别,单机实验的结果能够不算。对真实数据和合成数据操做的实验结果分别有8.1和8.2节给出。

8.1 真实数据

本节给出了运行OSM真实数据集处理操做的性能结果。多边形合并算法的结果经过多边形来运行,而其余四个操做主要是针对点数据集。

8.1.1 多边形合并

图10(a)给出了不一样输入大小的多边形合并操做处理时间。从OSM1数据集中提取出来的不一样大小的数据子集为 250MB,1GB,4GB,10GB。如图10(a)所示,单机多边形合并算法没有规模,并且对于大的数据集迅速出现了内存溢出异常致使失败。尽管 4GB的数据集适合内存计算,可是该算法采用须要更多的内存的内部数据结构,容易致使程序崩溃。CG_Hadoop算法在集群存储计算和内存开销方面拥有 更好懂得负载分布。另外,CG_Hadoop基于SpatialHadoop运行时表现更好,由于空间划分能够加速局部和全局合并步骤。如3.2章节描 述,空间划分有利于减少中间数据的大小(如局部合并输出结果)这也会影响算法的整个性能。

\

 

8.1.2 其余操做

图10(b)展现了对OSM2数据集进行不一样操做的结果。结果代表CG_Hadoop拥有优于传统技术几个数量级。基于SpatialHadoop 的CG_Hadoop的运行在图中采用实体柱状图标识,可是很难看出,由于它与单机算法相比处理时间很是少。对于轮廓线和凸包操做,当分别在Hadoop 和SpatialHadoop运行CG_Hadoop达到了平均8倍和80倍的加速度。最远组对首先计算出凸包,而后采用循环旋转卡尺方法,该方法更适合 凸包大小比较小的状况。这就致使了最远组对运行时间和凸包运行时间很是类似,由于循环旋转卡尺算法针对小的凸包须要很是短的时间。以后,本文给出了最远组 对实验,对于该方法来讲,凸包太大了。最后,针对最近组对,仅给出了基于SpatialHadoop的CG_Hadoop的结果,由于单机算法出现了内存 溢出异常。

\

 

8.2 合成数据

本节分别给出了生成数据的每个操做更多的详细结果。没有针对合成数据进行多边形合并,由于他须要更多先进的生成器,这个超出了本文的范围。本文展现了四个操做,轮廓线、凸包、最远组对和最近组对。数据集大小从4GB到128GB,生成的数据分布如图8所示。

图9是单机算法和CG_Hadoop进行轮廓线操做的性能图。单机算法循环读取输入点,当物理内存缓冲区满时,使用的缓冲区的大小将减小。这使得与 算法能够处理任意大小的数据。尽管单机可以完成实验,可是省略了一些结果来调整它的规模。当CG_Hadoop以Hadoop标准来部署,因为采用了集群 多台机器并行计算,得到的几个数量级的性能。局部轮廓线步骤在删除大多数点仅仅留下全局所需的点时很是有效。CG_Hadoop可以达到两个数量级的性 能,当部署在SpatialHadoop上时。如此好的性能主要是因为过滤步骤可以删除分区而不硬性记过,减小了处理区块的总个数。

凸包算法的处理时间如图11所示。凸包算法经过循环读取输入点,若是内存缓冲满,经过凸包算法的一次迭代和仅保留的结果内存使用有限。 CG_Hadoop中凸包算法描述如图5.1所示,因为凸包经过集群中分布式计算因此必单机算法要快不少。CG_Hadoop在 SpatialHadoop中运行更有效,由于过滤步骤容许使其最小化修剪的分区处理不会影响结果。尽管不是这里显示的清晰图,部署在 SpatialHadoop上的CG_Hadoop达到260倍加速比传统的系统。

8.2.3最远组对

在CG_Hadoop中经过两种技术计算最远组对。第一个是经过循环卡尺算法计算凸包[33],这是只适用当凸包的大小是有限的。本文采用这项技术 进行单机实验。第二个方法是6.2节中描述的修改蛮力方法。图12(1)不一样的输入大小进行比较两种方法的性能。本文经过生成如图8(e)中的循环数据集 去获取最大的凸包。如图所示,第一个技术更有效,由于他须要围绕凸包单独扫描。然而,当凸包很是大数据大小超过主存容量时,将会失败。另一方面,修改后 的蛮力的方法在CG_Hadoop中是低效的,由于它须要大量计算点之间的距离选择最远距离的组对。然而,它有一个可伸缩性优点由于它须要相比很是小的内 存占用单机算法。只有当旋转卡尺使用方法不适用,建议修改后的蛮力。

\

 

8.2.4 最近组对

如图12(b)是不一样输入数据大小的最近组对实验结果。传统的单机算法不能扩展到大文件,由于它已经加载整个数据集内存。如实验所示,当数据量达到 16GB时,传统算法将失败。CG_Hadoop因为两个缘由达到了最好的性能。第一个,最近组对计算时经过集群并行算法加快了整个算法。第二,每一台机 器删除了计算最近组对许多再也不须要考虑的点。如图所示,CG_Hadoop具备可伸缩性,由于每一台机器仅仅处理每个分区,在有限的时间内,须要内存使 用的大小,不会有内存问题。

\

九、 相关工做

在计算几何领域使用MapReduce从理论的角度讨论了[15]代表模拟MapReduce中Bulk-Synchronous平行(BSP),并应用他解决了一些计算几何问题,如凸包等。然而,没有提供实际的实施,没有给出如何实现其余不依赖BSP模型的算法。

据咱们所知,咱们在CG_Hadoop工做是第一个针对不一样计算几何问题提供详细的MapReduce实现。与此同时,还充分利用了Hadoop的 优点去支持空间数据。在MapReduce中目前支持空间数据的方法能够分为两类:(1)解决特定的空间操做和(2)提供一个空间数据框架。

特定的空间操做。现有的这类工做主要集中在Hadoop中的MapReduce上实现特定的空间操做。这些工做 实例主要集中在R-tree创建[8]、空间查询点[38]、空间查询轨迹数据[24]、KNN[2,38]、ANN查询[36]、RNN查询[2]、空 间连接[38]、精确KNN连接[23]、和模糊KNN连接[37]。

统一的空间操做框架。针对不一样的空间操做存在四个相近的系统:(1)Hadoop-GIS[1]是一个空间数据 仓库系统,主要集中处理医疗数据。(2)Parallel-Secondo[22]是一个并行空间数据库管理系统,采用Hadoop做为一个分布式任务调 度者,当全部的存储和空间查询处理经过运行在集群节点上的空间DBMS实例。(3)MD-HBase[27]扩展了HBase去支持多维索引,容许很是高 效的使用范围和字段式查询检索点。(4)经过格网文件和R-Tree索引扩展Hadoop,提供新的MapReduce组件容许在空间MapReduce 程序中使用这些索引。

本文的工做,CG_Hadoop,基于以上两个部分。首先,并无彻底集中在一个特定的空间操做上。而是涵盖了5个不一样和基础的计算几何空间操做。 第二,没有提供一个新的系统。而是提供了一个基于SpatialHadoop的多种计算几何算法的高效实施,这样能够利用提供的空间索引获得更高的性能。 总之,CG_Hadoop造成了综合的MapReduce类库的核心,来进行计算几何操做。它的开源特性也使得他可以成为一个研究载体,供研究者去创建更 多的计算几何算法,充分发挥MapReduce范式的优点。

十、 结论

本文介绍了CG_Hadoop;一套可伸缩的和高效的MapReduce算法,对各类基本计算几何操做,即,多边形合并、凸包、最远坠和最近组对。 对于每一种操做,CG_Hadoop具备两个版本:基于Apache Hadoop系统和基于SpatialHadoop系统。CG_HAdoop中的算法采用了分而治之的方法,利用Hadoop和分布式并行环境 SpatialHadoop,从而比相应的传统算法达到更好的性能。同时,SpatialHadoop算法明显优于Hadoop算法,由于他们利用 SpatialHadoop以内空间索引和组件。总的来讲,CG_Hadoop形式一个全面的MapReduce计算几何类库操做。在一群25台机器集群 中的,数据达到了128GB,普遍的实验结果代表使用Hadoop和SpatialHadoop系统的CG_Hadoop比传统算法分别达到了29倍和 260倍。

相关文章
相关标签/搜索