Spark 3.3.0适配的geomesa-accumulo版本及安装报错咨询
适配Spark 3.3.0的GeoMesa-Accumulo版本及SPI报错解决方案
一、版本适配说明
Spark 3.3.0默认使用Scala 2.12,你之前选用的geomesa-accumulo_2.11-2.0.0是针对Scala 2.11和Spark 2.x的版本,必然出现兼容性问题。适配Spark 3.3.0的推荐版本:
- GeoMesa-Accumulo 3.5.0(稳定版,适配Scala 2.12 + Spark 3.x)
- 或 GeoMesa-Accumulo 4.0.0(最新版,同样支持Scala 2.12 + Spark 3.x)
注意必须选择后缀为_2.12的包,确保Scala版本与Spark完全匹配。
二、解决DataStoreFactorySpi SPI报错的方法
该报错源于GeoTools的SPI服务注册与Java ImageIO的SPI扫描机制冲突,以下是几种可行的解决方式:
方法1:设置系统属性禁用ImageIO SPI扫描
在启动Spark(或Jupyter Notebook)时添加系统属性:
-Djavax.imageio.spi.ClassLoader=com.sun.imageio.spi.ClassLoaderUtil
也可在Scala代码开头直接设置:
System.setProperty("javax.imageio.spi.ClassLoader", "com.sun.imageio.spi.ClassLoaderUtil")
方法2:排除冲突的GeoTools依赖
若通过Maven/SBT引入依赖,排除引发冲突的gt-image模块:
- SBT配置:
libraryDependencies += "org.locationtech.geomesa" % "geomesa-accumulo-spark-runtime_2.12" % "3.5.0" exclude("org.geotools", "gt-image")
- Maven配置:
<dependency> <groupId>org.locationtech.geomesa</groupId> <artifactId>geomesa-accumulo-spark-runtime_2.12</artifactId> <version>3.5.0</version> <exclusions> <exclusion> <groupId>org.geotools</groupId> <artifactId>gt-image</artifactId> </exclusion> </exclusions> </dependency>
方法3:正确配置Spark类路径
在Docker容器中启动Spark时,确保GeoMesa和GeoTools的JAR包被正确添加到Spark的--jars参数中,避免类加载器冲突:
spark-shell --jars /path/to/geomesa-accumulo-spark-runtime_2.12-3.5.0.jar,/path/to/geotools-*.jar
若使用Jupyter PySpark,可在配置中添加:
import pyspark conf = pyspark.SparkConf() conf.set("spark.jars", "/path/to/geomesa-accumulo-spark-runtime_2.12-3.5.0.jar") sc = pyspark.SparkContext(conf=conf)
额外修正:PostGIS DataStore参数优化
你的代码中"geotools" -> "true"参数属于冗余配置,PostGIS的DataStore无需该参数,建议移除以避免不必要的初始化问题:
val dataStoreParams = Map( "dbtype" -> "postgis", "host" -> "backend-postgres", "user" -> "postgres", "passwd" -> "mypassword", "port" -> "5432", "database" -> "dev") val dataStore = DataStoreFinder.getDataStore(dataStoreParams);
内容的提问来源于stack exchange,提问作者Luigi
相关产品推荐
相关产品推荐

