SuperMap GIS大数据分析调优行动指南

SuperMap GIS大数据分析调优行动指南

一、大数据分析调优目的

    项目数据量达到千万,如果需要进行千万级与千万级数据一起分析时,很多客户会考虑选择SuperMap GIS基础软件(下文简称GIS软件)大数据模块。大数据模块环境配置较其它产品相对复杂,Spark等环境需要在Linux通过命令行来设置,对项目实施来说可能会有一定门槛。
    从多年大数据分析项目经验总结出一套调优参考办法,可供参考。

二、调优思路

    大数据分析调优主要主要有三种思路:Spark集群调优、数据调优、 GIS软件调优,如下图:
在这里插入图片描述

2.1 Spark环境调优

    Spark参数优化主要集中在spark-defaults.conf文件中,本文从以下四个方面进行调优参数介绍:

  • 内存调优:在spark-defaults.conf文件进行修改

  • 并行度调优:在spark-defaults.conf文件进行修改

  • 磁盘IO调优:在spark-defaults.conf文件进行修改

  • 网络IO调优:在spark-defaults.conf文件进行修改

    具体参数介绍及推荐值如下表所示,在您修改参数后,请重启Spark确保参数修改生效:

调优方向 配置项 配置项描述 默认值 推荐值
内存调优 spark.driver.memory 用于设置Driver进程的内存大小 1GB 2GB或4GB
spark.executor.memory 用于设置Executor进程的内存大小 1GB 2GB或4GB
spark.memory.fraction 用于设置Spark内存管理器的堆内存占比 0.6 0.5或0.7
spark.memory.storageFraction 用于设置Spark内存管理器的存储内存占比 0.5 0.4或0.6
spark.executor.memoryOverhead 用于设置Executor除了执行任务所需的内存之外,还需要额外保留的内存大小 max(384m, 10% of spark.executor.memory) Executor的额外内存大小,可以设置为一个较小的值,如256M
并行度调优 spark.default.parallelism 用于设置RDD的默认并行度 默认值为当前集群的CPU核数 2~4倍的CPU核数
spark.sql.shuffle.partitions 用于设置Shuffle操作的并行度 200 1000或更高
spark.cores.max 设置每个应用程序能够使用的最大CPU核心数 当前集群CPU核数 如果您的应用程序需要大量的CPU资源,那么可以将这个参数设置为接近或等于可用CPU核心的总数,否则推荐设置为CPU核心数的70%~80%左右
磁盘IO调优 spark.local.dir 用于设置本地磁盘临时目录存储路径 /tmp 设置为具有足够磁盘空间的本地目录路径,以确保Spark应用程序有足够的空间来存储中间结果和其他缓存数据
spark.shuffle.file.buffer 用于设置Shuffle操作的缓冲区大小 32k 64k或128k
spark.reducer.maxSizeInFlight 用于设置Reducer的最大输出大小 48m 128m或256m
网络IO调优 spark.rpc.message.maxSize 用于设置RPC消息的最大大小 128MB 如果您的应用程序需要处理大规模数据,可以将这个参数的值增加到512MB或更高

官方配置项(3.3.0版本)说明
http://spark.incubator.apache.org/docs/3.3.0/configuration.html

2.2 数据调优

2.2.1 如何选择合适的存储数据库

    适合大数据存储和分析的数据库类型,因业务场景不同而有所不同,如下为SuperMap GIS产品中适合大数据存储分析的数据库类型、介绍及优缺点简要说明:

数据库类型 数据库介绍 优缺点
Hadoop HDFS Hadoop HDFS是Hadoop分布式文件系统的缩写,它是一个分布式文件系统,核心设计思想是将大文件分成块(block),并将这些块存储在不同的节点上,实现高可靠性、高吞吐量的数据访问,并支持在大规模集群上存储和处理数据 优点:可扩展性强,支持PB级别的数据存储;
缺点:不适合存储结构化数据,读写性能相对较低
PostGIS PostGIS基于PostgreSQL的一个开源的空间地理信息系统扩展,适用于存储和处理空间数据。它支持复杂的空间查询和分析,具有较高的可靠性和性能 优点:适合存储空间数据,具有处理空间数据的能力,提供了许多用于空间数据操作的函数和操作符,可以进行空间数据的查询和分析;
缺点:不适合存储非空间数据
其它 达梦、瀚高、禹贡、人大金仓、Oracle 优点:支持的数据库种类繁多,满足各种数据库连接读取需求;
缺点:大部分数据库不能以JDBC方式读取,分布式读写性能比不上支持JDBC的库

    综上所述,根据具体的应用场景和需求,可以选择不同的数据库,以下为各个场景的推荐库:

应用场景 推荐数据库
数据量上千万,支持存储地理分区要素数据集,写入DSF目录 Hadoop HDFS
需要存储和处理空间数据 PostGIS
需要存储到关系型数据库 达梦、瀚高、禹贡、人大金仓、Oracle 等

2.2.2 数据库调优

HDFS

HDFS调优,主要修改Hadoop/etc/hadoop/hdfs-site.xml文件:

  • 增加数据块大小:可以通过增加HDFS数据块大小来提高读取性能。在hdfs-site.xml配置文件中,可以设置dfs.blocksize参数,默认为128MB。
  • 增加副本数:可以通过增加HDFS数据块的副本数来提高读取性能和数据可靠性。在hdfs-site.xml配置文件中,可以设置dfs.replication参数,默认为3。
  • 启用压缩:可以通过启用数据压缩来减少磁盘空间占用和网络传输开销。在hdfs-site.xml配置文件中,可以设置io.compression.codecs参数,选择需要的压缩算法,如org.apache.hadoop.io.compress.GzipCodec。

PostGIS

PostGIS调优,主要修改PostgreSQL/data/postgresql.conf:

  • 增加缓存:可以通过增加缓存大小来提高读取性能。可以通过postgresql.conf配置文件中的shared_buffers参数来设置缓存大小,默认为128MB,通常建议设置为系统内存的1/4到1/3。
  • 调整查询计划:可以通过调整查询计划来提高查询性能。可以通过postgresql.conf配置文件中的effective_cache_size(通常建议将其设置为系统内存的一半)、work_mem(建议设置为shared_buffers的1/16到1/8之间)等参数来调整查询计划。
  • 启用字段索引:可以通过启用索引来提高查询性能。可以通过CREATE INDEX命令或pgAdmin等工具来创建索引,如:
CREATE INDEX idx_name ON table_name (column_name) WHERE column_name > 0;
  • 空间索引:可以通过调整PostGIS的索引来提高查询性能。可以通过CREATE INDEX命令或pgAdmin等工具来创建索引,如:
CREATE INDEX mytable_gist_idx ON mytable USING gist (geom); 
  • 使用空间聚合:如ST_Union、ST_Collect和ST_ConvexHull等,可以将多个几何对象合并成一个对象。使用空间聚合可以减少查询的数据量,从而提高查询性能。

2.2.3 数据优化

    除数据库配置优化外,对于具体的数据和数据量,本文主要推荐2种做法:

  • 保证精度前提下,减少参与计算和分析的数据量

          ○常用办法:抽稀或者用数据库函数等操作去简化数据

  • 数据量不可变情况下,为数据创建索引

          ○常用办法:参考2.2.2数据库调优及2.3SuperMap GIS产品调优部分

2.3 SuperMap GIS产品调优

2.3.1 SuperMap GIS引擎调优

    GIS软件中,针对不同数据库使用的连接引擎有所不同,不同连接引擎支持数据库不同、优势存在差异,具体情况如下:

JDBC

  • 引擎对应的连接数据库有:PostGIS、OracleSpatial
  • 引擎介绍:Java数据库连接的缩写,是Java语言中用于连接和操作关系型数据库的API。JDBC提供了一个标准的接口,使得Java程序可以连接到不同的关系型数据库,并执行SQL查询和更新操作。JDBC可以在Java应用程序和数据库之间建立一条连接,并提供了一系列的接口和方法,用于执行SQL语句、处理结果集、管理事务等操作
  • 优点:可在集群模式下可以实现分布式读写,极大提升性能
  • 缺点:JDBC方式目前只支持读取PostGIS和OracleSpatial中的空间数据
  • 调优方式:参考2.2.2数据库调优部分

DSF

  • 引擎对应的连接数据库有:Hadoop HDFS
  • 引擎介绍:分布式空间文件引擎(Distributed Spatial File,以下简称DSF),能够管理矢量、栅格和影像数据,兼备大体量空间数据的高性能分布式存取、空间查询、统计、分布式分析、空间可视化及数据管理能力
  • 优点:DSF更加适合全量空间数据的高性能分布式计算,能够进一步强化海量经典空间数据的分布式存储和管理能力,显著提高大数据量的计算性能
  • 缺点:数据需要提前建立地理分区索引,比直接从矢量数据读取分析会多一步操作。
  • 调优方式:构建合适的索引
              格网索引:数据分布比较均匀时使用该索引,需要设置一个合适的行列号,行列数目的设置依据每个格网内对象数据,形成的格网中对象数目控制在一定程度,比如面对象10w以内,点50w以内
              四叉树索引:数据分布不均匀,呈现明显的聚集特点时使用该索引。地理分区要素数据集中每个分区对象数目最大值处理原则一般是,将数据集以 DSF
    方式存储,每个 DSF 文件大小不超过 Hadoop 块文件大小(默认情形下,Hadoop 块大小是
    256M)。例如点类型的要素数据集为50w对象,国土地类图斑数据为5w对象等

SDX

  • 引擎对应的连接数据库有:达梦、瀚高、禹贡、人大金仓、Oracle 、PostGIS等
  • 引擎介绍:SDX是SuperMap的空间引擎技术,它提供了一种通用的访问机制(或模式)来访问存储在不同引擎里的数据。这些引擎类型有数据库引擎、文件引擎和Web 引擎
  • 优点:SDX面支持目前的主流商用关系数据库平台,提供了R树索引、四叉树索引、动态索引(多级格网索引)和图幅索引(三级索引),充分发挥每一种索引的优势,提高了数据访问和查询效率
  • 缺点:由于SDX读写都是整库取到内存中,分布式读写效率不高
  • 调优方式:通过桌面端提前对数据创建合适的空间索引与字段索引

2.3.2 JDBC、DSF、SDX该如何选择

使用场景 推荐的引擎
千万级别以上的数据 DSF
常规使用 JDBC
对于数据存储到不支持JDBC和DSF的库 SDX

三、可能遇到的问题及解决办法

问题一:Spark运行过程中报错java.Lang.UnsatisfiedinkError:supermap.data.EnvironmentNative.jni GetBasePath()Ljava/lang/String;

在这里插入图片描述

解决方案:这是由于没能读取到JAVA组件,需要检查JAVA组件是否已安装、安装后在系统中配置是否正确、是否缺少依赖;待组件配置正常后,再重新提交任务即可。

四、更便捷的大数据分析方式

    使用SuperMap GIS产品时,您可通过多种方式使用大数据分析。在此,推荐您使用SuperMap GIS中GPA模块(SuperMap iDesktopX与SuperMap iServer中均有提供)

  • GPA提供100+算子,支持扩展自定义工具,开发人员无需编写复杂代码,便可以通过可视化建模简单快捷的搭建自己的业务流程,实现空间数据处理与分析过程的自动化;
  • 对于Spark调优参数支持UI界面直接修改,无需重复修改Spark配置文件;
  • 已有业务模型,支持导出与导入,可以方便快捷地共享复用,极大降低大数据分析的使用门槛。

在这里插入图片描述

(SuperMap iServer 处理自动化服务)
    如果您在使用过程中有任何疑问,欢迎拨打技术支持热线:400-8900-866。

猜你喜欢

转载自blog.csdn.net/supermapsupport/article/details/131696348
今日推荐