You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spark集成Delta Lake依赖解析失败(SSL证书问题)求助

问题描述

在S3环境下使用Spark,采用Parquet格式并通过Delta Lake管理数据,Spark与S3连接已正常,但Python集成Delta Lake时出现依赖解析失败,错误信息如下:

----------------------------------------------------------------------------------

>           ::::::::::::::::::::::::::::::::::::::::::::::
>     
>           ::          UNRESOLVED DEPENDENCIES         ::
>     
>           ::::::::::::::::::::::::::::::::::::::::::::::
>     
>           :: io.delta#delta-core_2.12;2.2.0: not found
>     
>           ::::::::::::::::::::::::::::::::::::::::::::::
>     
>     
>     :::: ERRORS
>       Server access error at url https://repo1.maven.org/maven2/io/delta/delta-core_2.12/2.2.0/delta-core_2.12-2.2.0.pom
> (javax.net.ssl.SSLException: Unexpected error:
> java.security.InvalidAlgorithmParameterException: the trustAnchors
> parameter must be non-empty)
>     
>       Server access error at url https://repo1.maven.org/maven2/io/delta/delta-core_2.12/2.2.0/delta-core_2.12-2.2.0.jar
> (javax.net.ssl.SSLException: Unexpected error:
> java.security.InvalidAlgorithmParameterException: the trustAnchors
> parameter must be non-empty)
>     
>       Server access error at url https://repos.spark-packages.org/io/delta/delta-core_2.12/2.2.0/delta-core_2.12-2.2.0.pom (javax.net.ssl.SSLException: Unexpected error:
> java.security.InvalidAlgorithmParameterException: the trustAnchors
> parameter must be non-empty)
>     
>       Server access error at url https://repos.spark-packages.org/io/delta/delta-core_2.12/2.2.0/delta-core_2.12-2.2.0.jar (javax.net.ssl.SSLException: Unexpected error:
> java.security.InvalidAlgorithmParameterException: the trustAnchors
> parameter must be non-empty)
>     
>     ---------------------------------------------------------------------------

已知错误与Maven/Spark仓库的HTTPS SSL证书有关,涉及证书路径/etc/ssl/certs/java/cacerts,已尝试重新安装OpenJDK 11、更新证书、配置Java security参数,但问题仍存在,需要排查Java是否读取正确证书目录、证书是否有效。

已尝试操作

  • 重新安装openjdk-11
  • 更新Java配置中的management.properties和security设置(指定JKS格式及cacerts位置)

错误排查与解决建议

1. 确认Java实际读取的cacerts路径

执行以下命令查看当前JVM使用的java根目录:

java -XshowSettings:properties -version | grep 'java.home'

根据输出的java.home路径,对应的默认cacerts路径为${java.home}/lib/security/cacerts,检查该文件是否存在且非空:

ls -lh $(dirname $(readlink -f $(which java)))/../lib/security/cacerts

也可以通过设置JVM参数强制指定信任库路径,验证是否能正常拉取依赖:

spark-submit --conf spark.driver.extraJavaOptions="-Djavax.net.ssl.trustStore=/etc/ssl/certs/java/cacerts -Djavax.net.ssl.trustStorePassword=changeit" --packages io.delta:delta-core_2.12:2.2.0 your_script.py

2. 验证cacerts证书有效性

检查cacerts文件是否包含Maven仓库的根证书:

keytool -list -keystore /etc/ssl/certs/java/cacerts -storepass changeit | grep -i "digicert\|verisign"

如果缺少根证书,手动导入Maven仓库的SSL证书:

  1. 下载证书:
openssl s_client -connect repo1.maven.org:443 </dev/null | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > maven.crt
  1. 导入到cacerts:
sudo keytool -importcert -file maven.crt -keystore /etc/ssl/certs/java/cacerts -alias maven-repo -storepass changeit -noprompt

3. 检查Java环境变量与配置优先级

确认是否存在覆盖默认信任库的环境变量:

echo $JAVA_OPTS
echo $SPARK_OPTS

检查Java的security配置文件(${java.home}/lib/security/java.security)中是否有如下正确配置,避免被错误修改:

ssl.trustStoreType=JKS
ssl.trustStore=/etc/ssl/certs/java/cacerts
ssl.trustStorePassword=changeit

4. 临时绕过SSL验证调试(生产环境禁用)

若上述方法无效,可临时关闭SSL验证确认是否为证书问题:

spark-submit --conf spark.driver.extraJavaOptions="-Djavax.net.ssl.trustStoreType=JKS -Djavax.net.ssl.trustStore=/dev/null -Djavax.net.ssl.trustStorePassword=" --conf spark.executor.extraJavaOptions="-Djavax.net.ssl.trustStoreType=JKS -Djavax.net.ssl.trustStore=/dev/null -Djavax.net.ssl.trustStorePassword=" --packages io.delta:delta-core_2.12:2.2.0 your_script.py

内容的提问来源于stack exchange,提问作者BFR92

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.29 19:53:12