首页 > 解决方案 > 如何更新在 Mac 上的 PyCharm 中运行的 pyspark 使用的 Java 密钥库?

问题描述

我在 Mac 上运行 PyCharm 2018.2 并执行 pyspark 程序。Spark 安装在 virtualenv 中。

我需要在我的 pyspark 脚本中使用外部 jars(特别是 AWS s3 jars),所以我使用以下内容来声明 maven 依赖关系:

import os
os.environ['PYSPARK_SUBMIT_ARGS'] = '--packages "org.apache.hadoop:hadoop-aws:2.7.3" pyspark-shell'
conf = SparkConf() \
    .setMaster("local[2]") \
    .setAppName("pyspark-unittests") \
    .set("spark.sql.parquet.compression.codec", "snappy")

sc = SparkContext(conf=conf)

在我的家庭网络上,这很好用。

在我的公司网络上,我和互联网之间有一个 SSL 检查器,它将 HTTPS 请求上的 SSL 证书交换到 Maven Central。

这会导致以下错误消息:

Server access error at url https://repo1.maven.org/maven2/joda-time/joda-time/maven-metadata.xml (javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target)

我知道这是因为 SSL 检查员用来签署 HTTPS 响应的 SSL 证书不受 pyspark 执行的 JVM 的信任。

我有签署 HTTPS 响应的中间证书的 .cer 副本。

在这种特定情况下使用哪个 JVM(在 PyCharm 中运行的 python/pyspark)以及如何更新该 JVM 信任库中的证书?

标签: pythonpysparkpycharm

解决方案


在调试器中运行程序并暂停它sc = SparkContext(conf = conf)然后运行ps aux | grep java,您将知道哪个jvm被用于此

然后你应该设置相同的密钥库。知道正确的 JDK 后,使用以下链接设置 keyStore

如何将自签名证书正确导入默认情况下可供所有 Java 应用程序使用的 Java 密钥库?


推荐阅读