[置顶] SpatialHadoop 中的 MapReduce 层

       关于这篇文章有点长,前几篇中断断续续的翻译了一部分,今天继续翻译一部分。对我来讲,我就是过一篇,让自己更清楚的了解下,大家可以看原文哦。偷笑偷笑偷笑(想看系列文章,请访问:系列文章,点我点我!

      和Hadoop类似,SpatialHadoop中的MapReduce层是执行MapReduce项目时的查询操作层。然而,与hadoop相比,前者输入的数据集是没有索引的,而SpatialHadoop支持空间索引文件。如图6所示,描述了Hadoop和SpatialHadoop中Mapreduce阶段的差异。在Hadoop中,输入文件通过文件分割器被切分为n份,n取决于MapReduce项目,是根据集群有多少个可用子节点来设定的。然后,每一份通过一个记录读取器将所有记录转化为键值对,这些键值对被传递给Map函数。而在spatialhadoop当中通过两个主要组件丰富了传统hadoop系统:(1)空间文件分割器,是一个扩展的分割器,它通过执行全局索引文件提前减少文件块,但不影响最终的结果;(2)空间记录读取器,可以读取来自带有空间索引的每一份文件,然后通过局部索引来高效的处理数据。(想看系列文章,请访问:系列文章,点我点我!)

       A、空间文件分割器

       与传统的文件分割器不同,传统的文件分割器只能输入一个文件,而空间文件分割器可以输入一个或者两个文件,每一个文件的数据块都建立了全局索引。另外,空间文件分割器可以通过过滤函数来筛选出文件数据块,但并不影响最终结果。一个单独的文件输入只能执行一元的操作,如空间查询,KNN查询等,而两个文件的输入可以执行二元操作,如空间连接等。

       针对一个文件的输入,空间文件分割器通过过滤函数、基于输入文件的全局索引文件、MBRs、以及需要执行的操作参数来筛选数据块。例如,一个空间范围查询可以通过过滤函数,根据最终的输出范围来减少文件块的输入。对于每一个过滤后得到的文件块,空间文件过滤器会生成一个分割文件,在后期的空间读取器中进行处理。

       针对两个文件的输入,例如空间连接等操作,空间文件分割器的执行大致相似,但有两处微小的差别:(1)过滤函数相应的通过执行两个全局索引。例如,空间连接操作通过叠加MBRs来找出相应的块对;(2)空间分割器的输出结果是一个合并的分割文件,针对两个输入的数据块,其结果包含了相应的文件范围对(如,文件偏移量和长度)。该文件会被传入到空间记录读取器中进行下一步的执行操作。

       B、空间记录读取器

       空间记录读取器从空间文件分割器的结果中获取到一个分割文件或者一个合并的分割文件,然后解析该文件,生成键值对传递到Map函数中。如果分割文件有一个单独的文件生成,空间记录读取器解析相应的数据库,提取出局部索引,通过该索引获取到该块中的所有记录。并不像传统Hadoop记录读取器那样将所有记录一个接着一个的传入到Map函数中,空间记录读取器通过局部索引将所有记录一次性传入到Map函数。这样一来有两个好处:(1)它允许map函数一起处理所有的记录,这样可以使其更灵活,更强大;(2)在处理块的同时,局部索引可以利用,这使其与扫描所有记录相比,更有效。为了保持与键值对记录格式一致,我们生成了<mbr, lindex>格式的键值对,将分配的块的最小外包矩形作为键,将指向本地索引的指针作为值。当不需要本地索引时,传统的记录读取器仍旧可以执行,可以被用于遍历记录。

       一旦从具有空间索引的输入文件中生成合并分割文件之后,空间读取器将解析存储在合并分割文件中的两个文件块,提取出相应的两个局部索引。然后建立对应键值对<mbr1, mbr2,><lindex1,lindex2>,传递给map函数进行处理。这里的键是一对mbr,相应的对应两个数据块,同时,值也是两个指针,分别指向对应的两个局部索引。

[置顶] SpatialHadoop 中的 MapReduce 层_第1张图片[置顶] SpatialHadoop 中的 MapReduce 层_第2张图片[置顶] SpatialHadoop 中的 MapReduce 层_第3张图片[置顶] SpatialHadoop 中的 MapReduce 层_第4张图片


GeoHadoop

你可能感兴趣的:(mapreduce,源码,hadoop,Gis,SpatialHadoop,GeoHadoop)