两步解码式空间矢量数据并行转换算法
Spatial vector data parallel conversion algorithm based on two-step decoding
通讯作者:
收稿日期: 2019-08-2
Received: 2019-08-2
作者简介 About authors
孙乐乐(1992—),男,博士生,从事空间大数据运算研究.orcid.org/0000-0003-4855-0629.E-mail:
传统单机转换工具与基于范围分区方案的并行转换算法存在扩展性差、数据倾斜的问题,为此提出两步解码式空间矢量数据(SVD)并行转换算法. 通过归纳地理空间数据库(GDB)中空间矢量数据的存储编码模式,构建优化后的几何解码函数作为基础工具. 初次解码:仅解析空间元数据,根据几何复杂度平衡解析任务,提高解析与数据量的均衡度;二次解码:借助几何并行解析机制提取、解析压缩几何字节,提高转换效率. 该算法基于Spark实现,将其与ArcGIS单机转换工具、基于范围分区方案的并行查询转换算法进行对比可知,所提算法具有显著的效率、性能扩展优势,转换效率提升了2.5~117倍,大幅降低了几何复杂度不均导致的数据倾斜情况.
关键词:
In view of the poor scalability and data skew in traditional single-machine conversion tools and RangePartitioner-based parallel methods, A spatial vector data (SVD) parallel conversion was proposed based on two-step decoding. An optimized geometry-parsing algorithm was introduced as a basic decoding tool with the storage schema of SVD in geospatial database (GDB). Only the spatial metadata was parsed in the first-step decoding, and the task was balanced according to the set geometry complexity to improve the balance between parsing and data. In the later-step decoding, the compressed geometry bytes were extracted and parsed with the geometric parallel parsing mechanism, to improve the conversion efficiency. This algorithm was implemented on Apache Spark, which was compared with ArcGIS conversion tool and the RangePartitioner-based parallel query transform algorithm. The experimental results verify that the proposed algorithm has significant advantages in efficiency and performance expansion; the conversion efficiency is promoted by 2.5−117 times; and the data skew caused by uneven geometric complexity is greatly reduced.
Keywords:
本文引用格式
孙乐乐, 金宝轩.
SUN Le-le, JIN Bao-xuan.
空间数据集成转换是对数据的形式特征和内部特征作全部或部分的调整、转化、合成、分解等操作[1],旨在提供更为高效、便捷的数据运算、管理及共享形式. 在大数据时代,数据准备占据了数据挖掘、人工智能等研究应用工作的主体,规范、合理的空间数据格式是进行地理空间分析的基础. 一方面,GIS技术的发展与应用积累了大量的空间矢量数据(spatial vector data,SVD),存储在传统地理数据库(geospatial database, GDB)中,无法直接支持大数据运算分析[2],如:第二次土地调查成果数据包含1.5亿个图斑[3],地理国情普查成果包含2.6亿个图斑[4]. 另一方面,随着分布式、可扩展的动态空间数据组织管理模式的兴起,半结构化矢量数据交换格式被广泛应用于云计算、互联网中,如:GeoJSON、文本坐标格式(well-known text,WKT)、二进制坐标形式(well-known binary,WKB)、地理标记语言(geographic markup language,GML)等[5-6]被用于大数据运算、支撑构建数据挖掘模型[7]. 空间矢量数据集成转换变得越发重要.
部分学者借助并行计算技术来提升转换效率,提出了多文件并行解析法[14-15]、并行SQL几何解码法(parallel SQL-based geometry decoding,PSGD)[16-17]以及整库迁移法[18]等. 多文件并行解析法利用并行计算框架与ESRI Shapefile(Shp)文件解析工具对多个Shp文件进行解析,实现SVD转换[14-15]. 由于受到容量限制,Shp仅适用于多个小文件并行转换的应用场景,不能直接支持大体量空间矢量数的转换;另一方面,Shp无法解决文件间的体量差异造成的数据倾斜问题. PSGD借助ArcSDE、Oracle Spatial等地理空间数据库中的几何解析转换函数(如:ST_AsText)拼接SQL并行查询GDB,获取转换后的数据[16-17]. 然而,由于SQL与几何解析转换函数的解析、执行环境为GDB,在整个计算过程中,并行计算框架仅用于并行发送SQL查询请求,并未支撑、执行空间几何解析这一计算密集型任务. 此外,SQL分区、分组查询功能有限,无法实现查询、解析任务的负载平衡. 整库迁移式转换法通过指令整体迁移GDB[18],无法改变矢量数据的编码格式.
已有并行方法忽视了几何复杂度对转换过程的影响. 几何复杂度即几何构成点数大小,SVD转换的主体计算是解析、提取坐标信息,几何复杂度的差异直接影响着转换计算量与转换后SVD区块存储的均衡程度. 并行计算框架在读取Oracle数据表时默认采用区间划分(RangePartitioner)分区器,按照均等切分思想尽可能地保证各分区记录数的均衡,但无法解决记录间的内容差异造成的倾斜问题,因此这种分区方法无法用于构建顾及几何复杂度的均衡策略. 当下流行的空间数据划分方法[19-20]能够提高空间数据的均衡程度,但其往往包含取样、迭代式区域统计、区域分解合并等运算,时间成本甚至大于转换运算. 因此,矢量数据并行转换需要一种更加轻便、高效的均衡化方案.
基于上述问题,要实现海量矢量空间数据的高性能转换,需要明确下列3点核心内容:1)将大体量的SVD存储于GDB;2)以并行计算框架执行空间几何解析计算;3)构建顾及空间几何复杂度的高效、轻便的均衡化方案来降低数据倾斜,提高集群资源利用的合理性.
本文提出一种两步解码式SVD并行转换算法. 通过分析GDB中的几何编码模式构建几何解码工具类,在首次解码中提取几何复杂度指标,均衡转换任务;在二次解码中通过空间几何并行解析机制实现基于并行计算框架的SVD解析转换,提高转换性能与扩展性. 本文将阐述算法的实现过程,并从转换性能、数据倾斜2个方面验证所提算法的性能.
1. 空间几何存储与编码
1.1. 空间几何存储类型
表 1 ArcSDE for Oracle中SHAPE的编码模式
Tab.1
字节 | 内容 |
0 | 字节数标识,高位为符号位,值为固定值4 |
1~4 | 表头元信息,可略过 |
5~6 | 标识STRUCT总字节数,二进制 |
7~m | 对应ST_GEOMETRY编码块,m为字节数组末尾位 |
算法1 Oracle数值型字节的数值解析
输入 Oracle中的数值型字节数组bytes.
输出 解析后数值res.
1. if bytes[0] > 128 //数值为正
2. index=bytes[0]&0x7f -64
3. for(int i=1; i<bytes.length;i++)
4. res+=(bytes[i]−1)*100index−i
5. return res;
6. else // 数值为负
7. index=127−bytes[0]−64
8. for(int i=1; i<bytes.length;i++)
9. res+=(101−bytes[i])*100index−i
10. return –res;
POINTS在Oracle中被存储为BLOB类型,包括BLOB列、LOB索引、LOB段3部分,根据其字节数是否超过3 964选择采用行内或非行内存储[22]. 在行内存储模式下,坐标数据存储在BLOB列,可直接查询访问;而在非行内存储模式下,坐标数据存储在LOB段内,必须通过LOB索引与定位器才能访问. 根据ArcSDE的SVD查询机制,只有涉及几何坐标数据请求的查询才会读取LOB段,否则查询SHAPE字段仅返回几何元数据属性与BLOB列、LOB索引,该机制可以减少输入、输出(input and output, IO),提高性能.
1.2. 坐标压缩与编码
为了节约存储空间,提高传输效率,GDB一般采取压缩编码策略存储坐标数据. 为了保证可解压性与解压效率,ArcSDE并未采用压缩表现更优的空间域或频率域压缩方法,而是通过改变数据类型、存储原点与偏移值的方式实现压缩,其压缩格式为SDELOB,包括以下3个处理步骤.
1.2.1. 坐标值整数化
式中:
1.2.2. 原点与偏移值计算
根据原点是否唯一可将几何分为2类. 第一类:点、多点、线、面;第二类:多线、多面. 前者仅有一个原点
式中:
第二类由多个第一类几何构成,每个构成部分都符合式(2),但中间增加了分隔位
1.2.3. SDELOB编码
文献[24]已对SDELOB压缩、编码进行了详细说明,本文补充2点:1)SDELOB字节为大端Big-endian顺序,解析时需要翻转次序;2)Oracle内LOB块一般为8 kb,SDELOB体积是其整数倍的情况较少见,因此,在非行内存储模式下,LOB段数据块中常常存在值为0的空余位. 在解析时应当利用NUMPTS、SDELOB长度信息共同进行约束,避免这部分的无意义运算.
本文基于上述空间几何编码规律,构建Java工具类用于几何元数据的提取、几何坐标的解析.
2. 两步解码式矢量数据转换算法
该算法以ArcSDE for Oracle为数据源,借助解析工具,通过两步式并行解析,实现SVD向交换格式的转换. 算法的总体思想为“两步解码均衡任务,并行解析提高性能”. 在性能方面,该算法利用空间几何并行解析机制实现并行几何解码转换,以提高传输、转换效率;在数据倾斜方面,初步解码仅从几何元数据中提取几何复杂度指标,以此进行数据划分、重新分区来均衡转换任务,由于并未查询获取非行内存储的大体积空间几何,本次解码避免了大量磁盘IO,降低了均衡处理内存成本. 在后一步解码中,根据存储模式提取SDELOB进行坐标解析、格式加工,由于本阶段的计算任务已均衡化,因此,该算法对集群计算资源、内存资源的利用更加合理、充分,该算法对集群的计算、内存资源利用率更高,能够进一步提高整体转换效率.
考虑到并行作业存在一定的配置、提交延迟,该算法提供单机串行计算模式,用于支持中、小体量SVD的转换,因此,首先根据下式确定计算模式:
式中:
2.1. SVD并行查询
SVD并行查询将GDB中的SVD读取为Spark JavaRDD<Row>,不执行其他操作,是两次解码的前提. 首先,按下式估算查询并行度:
式中:
确定
式中:
2.2. 首次解码
首次解码的工作主要是从
在空间几何中,点要素几何一定为行内存储模式,因其仅有一个构成点,字节长度一定小于3 964. 其他类型几何对象的存储模式需要根据SHAPE字节数与构成点数进行计算、判断. 由第1章可知,SHAPE字段的字节内容包括7位STRUCT元数据字节、几何元数据属性占用的字节、NUMPTS属性占用的字节. 在行内存储模式下,BLOB内的SDELOB对象有一个理论最小体积,因此,行内存储的空间几何SDELOB体积一定大于或等于该值. 基于这一思想,本文提出通过下式判断存储模式、提取信息:
式中:
2.3. 二次解码
二次解码基于均衡化的转换任务,借助几何并行解析机制实现高性能空间几何解码与数据转换. 首先要获取几何类型、坐标系标识(well-known id,WKID)、NUMPTS信息. 几何类型用于判断原点是否唯一,WKID用于确定式(1)中的
二次解码的关键在于准确地获取SDELOB. 对于简单几何数据集,SDELOB直接存储于BLOB列内,要获取SDELOB只须按照式(6)计算各组成部分的长度信息,提取SDELOB字节起始位置,对SHAPE字节内容进行截取.
复杂几何数据集中并未存储SDELOB,结合第1.1节,要获取LOB段中的SDELOB字节,必须在查询中请求几何坐标数据. 由于
算法2 复杂几何数据集SDELOB的提取与解码
输入 复杂几何数据集CompGeoPairRDD.
输出 完成解码、转换后的目标格式数据集RDD.
1. for each partition in CompGeoPairRDD do
2. 建立一个GDB连接conn.
3. 获取临时oracle.sql.STRUCT对象tmpStruct.
4. for each LOB index bytes in this partition do
5. tmpStruct.setBytes(LOB index bytes).
6. myDecoder.decode(tmpStruct.getbytes(13)).
7. 属性、空间数据格式加工输出到RDD B.
8. conn.close.
9. Return RDD B.
3. 算法实现
如图1所示,本文算法分为单机和并行2种模式. 单机串行模式面向中、小体量SVD,基于JDBC实现,通过遍历单机查询结果集,借助本研究构建的几何解码工具类对SHAPE字段、属性字段进行解析、格式加工,实现转换. 在并行计算框架中,Spark具备良好的SQL支持及内存运算特性,具有高扩展性、易用性、通用性等优点. 并行模式基于Spark实现,包括3个作业阶段.
图 1
图 1 两步解码式矢量空间数据并行转换算法的实现过程
Fig.1 Implementation process of spatial vector data parallel conversion algorithm based on two-step decoding
3.1. 作业配置阶段
本阶段对并行转换作业涉及的SVD数据体量、作业并行度、Spark SQL相关参数进行配置.
数据体量可通过查询Oracle系统表中SVD数据表的记录数、平均记录大小数据,根据式(4)估算获取,并结合HDFS默认区块大小,估算
3.2. 首次解码阶段
通过mapPartitionsToPair算子对查询结果DataFrame进行解析. 每个传入Dataframe由Spark Row组成,属性数据按照对应的Spark数据类型直接存储在Row中,可直接获取;由于配置了SparkSQL方言,SHAPE字段内容以字节数组存储于Row中。通过式(6)计算H,并将查询结果键值化为<H,Tuple2<String,byte[ ]
3.3. 二次解码阶段
利用filter算子,根据JavaPairRDD的Key值过滤得到简单几何数据集与复杂几何数据集,并分别进行重新分区. 对分区后数据的ValueRDD部分通过mapPartitions算子,利用本研究构建的几何解码工具类,提取SDELOB、解析几何坐标,最后进行标准化处理,将输出保存为目标格式,完成转换.
4. 实验与结果分析
4.1. 实验设计与数据
实验的单机环境处理器为Intel Xeon E3-1230 v5,内存容量为8 G,操作系统为Windows 10专业版,ArcGIS版本为10.5. 并行环境为CDH集群,版本为5.13.3,包括4个计算节点,96个CPU虚拟核,节点内存为80 G,Spark版本为1.6.0.
采用自然资源管理单位的SVD来验证算法在真实应用场景中转换生产数据时的表现. 数据信息如表2所示,共包括5个数据集,数据体量由小到大,其中,数据集
表 2 实验数据集信息
Tab.2
数据集 | 数据区域 | 要素数/M | 构成点数/M | 数据大小/GB |
| 怒江州 | 0.103 | 11.939 | 0.512 |
| 33° 带 | 0.041 | 44.305 | 1.300 |
| 35° 带 | 1.996 | 192.056 | 6.300 |
| 云南省 | 8.280 | 730.922 | 22.900 |
| 云南省 | 8.396 | 2069.057 | 56.730 |
试验以GeoJSON为目标格式,将所提算法与单机、并行转换方法进行对比. 其中,单机转换法是指ArcGIS中的JSON转换工具,并行转换法包括PSGD与一步解码式SVD转换算法.
PSGD方法来自文献[16],原始方法的计算框架为MapReduce,以ST_AsText函数查询、获取转换为WKT格式的SVD,实现并行转换. 前期测试发现其效率较低,转换数据集
图 2
图 2 不同查询数据量下ST_AsText、ST_AsBinary函数的查询响应耗时对比
Fig.2 Comparison of query response time between ST_AsText and ST_AsBinary functions with different query data sizes
将本文算法与一步解码式SVD并行转换法进行对比,以验证提出的两步解码处理在提高转换性能、改善数据倾斜方面的作用. 一步解码转换法首先进行SVD并行查询,而后借助本研究构建的几何解码工具直接执行几何解码、标准化,完成转换. 一步解码转换法的均衡方案只有范围分区处理.
4.2. 实验结果分析
4.2.1. 转换性能分析
表 3 采用各转换方法转换不同数据集的执行耗时对比
Tab.3
转换方法 | | | | | |
ArcGIS | 5.60 | 16.42 | 87.80 | 252.40 | 689.22 |
PSGD | 1.90 | 2.68 | 8.93 | 49.98 | 53.70 |
一步解码法 | 0.53 | 2.08 | 2.67 | 4.67 | 6.73 |
两步解码法 | 0.51 | 1.08 | 1.73 | 4.03 | 5.87 |
图 3
图 3 采用各并行方法转换不同数据集时的集群CPU利用率 对比
Fig.3 Comparison of cluster CPU utilization by various parallel conversion methods for different datasets
图 4
图 4 采用各并行方法转换不同数据集时的集群磁盘写入速率对比
Fig.4 Comparison of write speed in cluster disk by various parallel conversion methods for different datasets
由表3可知,并行转换方法具备显著的性能与扩展性优势,转换耗时均保持在60 min内;而ArcGIS单机转换工具的执行耗时随数据量的增加急剧增长,数据集
并行转换方法间的耗时差异验证了本文算法“两步解码均衡任务,并行解析提高性能”处理思想的性能与扩展性优势. 其中,PSGD方法的耗时最长,结合图3、4可知,无论转换数据体量的大小如何,PSGD的集群CPU利用率始终无法超过30.9%,磁盘写入速率在并行方法中也是最低的. 这一结果与本文第一部分对PSGD性能缺陷的论述一致,其转换性能被GDB端几何解析转换函数的执行效率所限制,并未实现在云环境中并行执行空间几何解码任务. 一步解码转换法与本文算法避免了GDB端的几何解码,并行查询获取的是GDB中原始形式的SVD,使GDB回归检索、传输数据的基本职能;借助几何并行解析机制,依托于云环境中的计算资源执行几何解码、格式加工,实现了良好的转换效率,最大耗时小于7 min. 一步解码法与本文算法的
与一步解码法相比,本文算法更具性能优势. 两者转换数据集
本文算法通过构建的几何解码工具类将几何解码运算转移到并行框架内,充分利用了集群计算的性能、扩展性优势;两步解码充分考虑了几何构成复杂度对转换运算的影响,提高了计算任务分配的均衡度,进一步提升了转换效率. 实验结果证实了所提算法在效率、性能扩展上的优越性.
4.2.2. 数据倾斜分析
为了评价并行转换方法在降低数据倾斜情况上的表现,构建转换耗时倾斜指标
由图5可知,PSGD与一步解码法的
图 5
图 5 采用各并行方法转换不同数据集时的耗时倾斜指标对比
Fig.5 Comparison of skewness in execution time by various parallel conversion methods for different datasets
本文算法的
由图6可知,相较于在转换耗时倾斜上的表现,PSGD、一步解码法在提高区块平衡上的表现与本文算法的差距更加明显. 这是由于虽然提高转换效率虽然可以减小
图 6
图 6 采用各并行方法转换不同数据集时的区块倾斜指标对比
Fig.6 Comparison of block skewness by various parallel conversion methods for different datasets
PSGD与一步解码法存在着严重的区块倾斜问题. 对于前3个数据集,PSGD的
本文算法在转换5个数据集时均保证了良好的区块平衡性,最大
实验结果证实了以几何复杂度作为核心平衡指标的合理性,验证了两步解码处理在降低数据倾斜方面的优越性;所提算法大幅提高了SVD并行转换中运算量、数据的均衡性.
5. 结 语
针对日益增加的SVD体量与空间大数据应用挖掘需求,本文提出了一种两步解码式空间矢量数据并行转换算法,通过并行查询、两步解码处理实现GDB中海量SVD由传统形式向交换格式的转换. 本文采用自然资源管理单位的真实生产数据,从转换效率、扩展性、数据倾斜方面分析了算法的表现. 与ArcGIS转换工具、PSGD以及一步解码转换法相比,采用两步解码转换算法构建的空间几何并行解析机制提供了最佳的转换性能与扩展性,转换效率提升了2.5~117倍;所提出的顾及几何复杂度的均衡策略大幅提高了SVD并行转换中运算量、数据的均衡性. 实验结果表明,提出的两步解码式转换算法在转换性能、扩展性和数据倾斜方面具有显著的优越性,能够为海量SVD迁移转换、空间大数据应用挖掘提供更高效的数据转换服务.
参考文献
地球空间数据集成研究概况
[J].DOI:10.3969/j.issn.1007-6301.2000.03.002 [本文引用: 1]
Overview of study on geo-spatial data integration
[J].DOI:10.3969/j.issn.1007-6301.2000.03.002 [本文引用: 1]
大数据GIS
[J].
Big data GIS
[J].
基于Spark的分布式空间数据存储结构设计与实现
[J].
Design and implement of a distributed geospatial data storage structure based on spark
[J].
GIS databases and NoSQL databases
[J].
Performance improvement techniques for geospatial web services in a cyberinfrastructure environment: a case study with a disaster management portal
[J].
基于GeoJSON的WFS实现方式
[J].DOI:10.3969/j.issn.1673-6338.2011.01.016 [本文引用: 1]
The realization of WFS based on GeoJSON
[J].DOI:10.3969/j.issn.1673-6338.2011.01.016 [本文引用: 1]
从平台GIS到跨平台互操作GIS的发展
[J].
Development from platform GIS to cross-platform interoperable GIS
[J].
基于GML的空间数据集成技术研究
[J].DOI:10.3969/j.issn.1672-1586.2014.02.008 [本文引用: 1]
Research of integration technology of spatial data based on GML
[J].DOI:10.3969/j.issn.1672-1586.2014.02.008 [本文引用: 1]
Extraction, transformation, and loading (ETL) module for hotspot spatial data warehouse using Geokettle
[J].DOI:10.1016/j.proenv.2016.03.117 [本文引用: 1]
多源空间大数据的获取及在城市规划中的应用
[J].DOI:10.3969/j.issn.1672-1586.2019.01.003
The acquisition of multi-source spatial data and its application to urban planning
[J].DOI:10.3969/j.issn.1672-1586.2019.01.003
Spatial urban data system: a cloud-enabled big data infrastructure for social and economic urban analytics
[J].
Oracle Spatial空间数据在ArcSDE中的图层注册
[J].DOI:10.3969/j.issn.1003-3254.2015.01.026 [本文引用: 2]
Layer register of Oracle Spatial data in ArcSDE
[J].DOI:10.3969/j.issn.1003-3254.2015.01.026 [本文引用: 2]
基于Oracle的ArcSDE数据迁移
[J].DOI:10.3969/j.issn.1672-5867.2018.03.048 [本文引用: 2]
Data migration of ArcSDE based on Oracle
[J].DOI:10.3969/j.issn.1672-5867.2018.03.048 [本文引用: 2]
Spatial coding-based approach for partitioning big spatial data in Hadoop
[J].DOI:10.1016/j.cageo.2017.05.014 [本文引用: 1]
Spatial partitioning techniques in Spatial Hadoop
[J].DOI:10.14778/2824032.2824057 [本文引用: 1]
基于ArcSDE的省级基础地理信息数据库系统建设
[J].DOI:10.3969/j.issn.1672-1586.2011.03.013 [本文引用: 1]
Building provincial fundamental geographic information database system based on ArcSDE
[J].DOI:10.3969/j.issn.1672-1586.2011.03.013 [本文引用: 1]
/
〈 |
|
〉 |
