一种海量遥感影像元数据分布式存储方法及并行查询方法

文档序号:9818313阅读:2407来源:国知局
一种海量遥感影像元数据分布式存储方法及并行查询方法
【技术领域】
[0001] 本发明属于海量遥感影像元数据查询领域,适用于海量遥感影像元数据的分布式 存储和分布式并行查询。具体涉及一种基于HDFS存储、Spark分布式并行计算、Redis内存缓 存的海量遥感影像元数据并行空间索引构建和分布式并行查询方法。
【背景技术】
[0002] 随着遥感影像元数据的不断积累,传统的空间数据库已不能满足对数据增长的存 储和查询。大数据技术的出现,海量遥感影像元数据的存储、查询、分析成为了可能。空间数 据库是通过空间索引技术提高查询效率,常用的索引技术有网格、KD树、四叉树、R树以及它 们的变形。国内外空间数据库厂商一般采用四叉树和R -树的索引方法,如国外的Arc Vi ew、 GeoSpatialDataBlade均采用R树系列的空间索引技术,国内的MapGis和SuperMap均采用四 叉树作为空间索引,Oracle公司的Spatial Ware采用了四叉树和R树结合的索引方法。
[0003] 单机的文件系统不能满足大数据的存储和查询分析。随着近几年大数据技术的出 现,文件系统得到了快速发展,出现了大量基于硬盘的分布式文件系统和基于内存的分布 式文件系统。分布式文件系统HDFS已经被广泛运用。HDFS是一个高容错性、高吞吐率、适合 海量数据集、能够部署在廉价的机器上的分布式文件系统。
[0004] 现阶段大数据计算框架层出不穷,Spark是UC Berkeley AMP lab所开源的类 Hadoop MapReduce的通用的并行计算框架,Spark基于map reduce算法实现的分布式计算, 拥有Hadoop MapReduce所具有的优点;但不同于MapReduce的是Job中间输出结果和最终结 果可以保存在内存中,从而不需要多次读写HDFS,因此Spark能更好地适用于数据挖掘与机 器学习等需要迭代的map reduce的算法。本发明的分区是基于树的构建,构建过程是递归 迭代的过程。在树上查询也是基于内存,Spark能够将数据缓存到内存。基于以上优点,本发 明的实施阶段采用Spark框架实现。

【发明内容】

[0005] 针对遥感影像元数据具有数据量大、计算复杂度高等特点,提出了一种海量遥感 影像元数据分布式存储方法及并行查询方法。本方法对遥感影像元数据进行均匀地理分 区,对分区后的数据进行分布式并行查询的解决方案。
[0006] 均勾地理分区是指在大数据框架Spark下,根据现有的KD-Tree算法发明了DKD-Tree算法。首先根据DKD-Tree算法对遥感影像元数据构建索引树。其次在构建DKD-Tree的 过程中,将DKD-Tree索引子树序列化并分散存储在分布式文件系统HDFS的各个机器节点 上。最后将DKD-Tree叶子节点上的数据以一个数据分区保存到HDFS中。在对数据分区的时 候,根据DKD-Tree叶子节点数据条数阈值保证每个分区中数据量能够使得Spark单个Task 快速计算。原始的KD-Tree算法只能对空间点数据(例如坐标数据)构建空间索引,DKD-Tree 算法可以对空间面数据(例如多边形)构建空间索引,其次原始的KD-Tree算法不能在分布 式下并行构建索引。
[0007] 海量数据查询是指利用Spark分布式并行计算能力,对遥感影像元数据在DKD-Tree上进行分布式并行分区查询。将查询到的分区在Spark集群节点上进行并行计算,最后 将所有机器上的查询结果汇总,然后缓存到Redis内存数据库中。
[0008] 数据分区和数据查询的具体步骤如下:
[0009] (a)海量遥感影像元数据分区:
[0010] 1.将原始未分区的海量遥感影像元数据存储到分布式文件系统HDFS中。
[0011] 2.根据属性进行属性(例如遥感影像元数据产生的时间,遥感影像元数据的文件 大小,遥感影像元数据的地理区域[例如中国、美国等]等)分区,并冗余存储到HDFS。优化针 对不同属性条件进行快速查询。
[0012] 3.利用DKD-Tree算法对每个属性分区后的数据再分别进行均匀地理范围(地理范 围指遥感影像元数据的经炜度范围)分区。
[0013] (1)参看图1,首先读取所有遥感影像元数据,计算最大经度和最大炜度的均值和 方差、数据总条数N、最小边界矩阵MBR(Minimum Bounding Rectangle)。构建DKD-Tree根节 点。将根节点保存到队列中。从队列中弹出一个节点标记为当前节点。
[00?4] 计算最小边界矩阵MBR:计算每条元数据的最小经度minLon,最大经度maxLon,最 小炜度minLax,最大炜度minLax。
[0015]计算炜度(经度)的均值公式:
[0017] 计算炜度(经度)的方差公式:
[0018]
[0019] (2)判断如果当前节点数据条数小于最小数据条数阈值,则当前节点不再分裂。将 当前节点标记为叶子节点,并分配唯一的ID标识。
[0020] (3)判断如果当前树深度大于树深度阈值则将当前树序列化并保存到HDFS。将当 前树的每个叶子节点中的数据保存到HDFS。(将叶子节点ID作为文件夹名称,将叶子节点中 数据保存到文件夹中。)
[0021] (4)如果当前节点数据条数小于等于最小数据条数阈值。选择方差最大的维度(经 度或者炜度)进行数据划分。计算数据条目的中位数。(中位数:例如方差最大维是经度。1. 首先对所有数据按照最大经度maxLon排序。2.求出最大经度的中位数。)
[0022] 方差最大维(经度或者炜度):Maxdim=rnax(VarmaxLat,VarmaxL〇n)
[0023] (5)根据(4)中计算的中位数将数据分为三个分支。①.最大边界(如果最大维为经 度,最大边界指最大经度maxLon)小于中位数的影像数据。②最小边界(如果最大维为经度, 最小边界指最小经度minLon)大于中位数的影像数据。③数据在①和②之外的其他数据。 [0024] (b)海量遥感影像元数据查询:
[0025] 1.针对遥感影像元数据进行分区并行查询。
[0026] (1)参看图2,将(a)中构建的所有的DKD-Tree缓存到集群各个节点的内存中。
[0027] (2)将查询条件(例如查询多边形polygon)在对应DKD-Tree树上进行查询,查询数 据所在分区。比如说查询条件中带有时间条件(2013-2015年),DKD-Tree按照年份构建的 树,比如2013年构建多颗DKD-Tree,2014年构建多颗DKD-Tree,2015年构建多颗DKD-Tree; 那么对应的DKD-Tree即指根据2013、2014、2015年份构建的所有DKD-Tree 〇
[0028] ①对于完全覆盖(查询多边形完全包含DKD-Tree节点的MBR)DKD-Tree的节点的查 询,如果当前节点是叶子节点,返回(叶子节点ID,数据条数count)。如果不是叶子节点,将 该节点下的所有叶子节点都返回(叶子节点ID,数据条数count)。
[0029] ②对部分覆盖(查询多边形与DKD-Tree节点的MBR相交)的叶子节点,返回叶子节 点ID。
[0030] (3)在遥感影像元数据中查询。(对于(2)中完全覆盖的数据都满足条件,因此不用 在遥感影像元数据中查询)。
[0031] ①从HDFS中读取(2)所有部分覆盖分区(每个叶子节点中的数据保存到HDFS,即为 一个分区)下的数据M。
[0032]②利用Spark计算查询多边形与每个分区下遥感影像元数据是否相交。
[0033]③最后对每个分区的遥感影像元数据相交条数进行累加。
[0034]④返回分区(区号等于叶子节点ID)和该分区下相交条数(叶子节点ID,数据条数 count)〇
[0035] (4)将完全覆盖的查询结果和部分覆盖查询结果汇总。汇总结果为一个数组 result。数组格式为[(leftIDl,countl ),( leftID2,count2),......] 〇
[0036] (5)将汇总结果按照叶子节点ID排序。
[0037] (6)将排序后的结果缓存到内存数据库Redis中,保存格式为(查询多边形, result)〇
[0038] 2.针对分页查询返回结果。
[0039] (1)根据每次查询条件(例如查询多边形和页码[polygon,pageNum]),首先根据查 询多边形polygon从Redis中读取缓存结果。
[0040] (2)根据当前页号pageNum、每页数据条数pageSize和1中(4)得到的缓存结果 result,计算数据所在分区。
[0041] ①计算最小分区。
[0042] 卩&1"1:10]\1;[11 = 111;[11(?),其中?满足((3011111:1+(301111七2 + ."+(301111七?)/卩&区63126> pageNum。
[0043] ②计算最大分区。
[0044] partIDMax = min(Q),其中Q满足(countl+count2+."+countQ)/pageSize> = (pageNum+1)〇
[0045] ③当前页数据所在分区为(Ρ,Ρ+1,Ρ+2,……,〇-2,〇_1,〇),其中?和〇都是正整数且 P〈 = Q,(P+l,P+2,……,Q-2,Q-1)分区中所有满足多边形相交的数据都要返回。在P分区中 只需要返回最后R条数据Pr,在Q中只需要返回前T条数据Qt。
[0046]④P中的最后R条数据Pr。
[0047] Pr=(countl+count2+."+countP)-pageSize*(pageNum-1)〇
[0048] ⑤Q中前T条数据Qt。
[0049] Qt = pageSize氺pageNum-(countl+count2+--.+countQ-2+countQ-l) 〇
[0050] (3)并行查询当前页数据。
[0051]①计算当前页数据在每个分区下的数据范围。根据(2)中的计算结果可知,(Ρ,Ρ+ 1,Ρ + 2,......,0_2,(>)-1,(>))分区下的数据范围为[(?1',(30111^?),(0,(30111^? + 1),(0, countP+2),......,(0,countQ-2),(0,countQ-1),(Qt,countQ)]。
[0052]②并行计算每个分区下数据。(如果当前分区是完全覆盖,同样不需要重新计算, 直接返回即可)。
[0053] I.从HDFS中读取每个分区数据。
[0054] Π .对查询多边形与每个分区中的数据计算是否相交。
[0055] m.分别收集每个分区中相交数据。
[0056] IV.对每个分区中的相交数据按照遥感影像元数据的编号进行排序。
[0057] V ·根据每个分区的数据范围[(Pr,countP),(0,countP+i),(0,countP+2),......, (0,countQ-2),(0,countQ-l),(Qt,countQ)],返回每个分区下满足当前页的数据。
[0058] VI.对V中所有返回的数据进行汇总。
[0059] 与现有技术相比,本发明的积极效果如下:
[0060] 在传统地理空间数据库中,对遥感影像元数据构建索引并查询,如果数据超过2G, 覆盖数据条数超过800万条,每次查询接近30秒。利用数据库可编程性受到了限制,只能通 过SQL、数据库函数等进行查
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1