用于从 EMR Jupyter Notebook 内部访问 Artifactory 的 PySpark 自签名证书

PySpark Self Signed certificate to access Artifactory from inside an EMR Jupyter Notebook

我正在尝试从托管在 AWS 托管服务 (EMR) 上的 EMR Notebook 内部使用 PySpark 内核,但我无法访问 Artifactory 来安装 PyPi 包。在 EMR 服务器本身上,我确实有 TLS/SSL 的 PEM 密钥,在 /etc/pip.conf 中,它已正确设置以访问 Artifactory 并指向证书。我通过 运行 在 SSH 进入边缘节点后从 Artifactory pip install SQLAlchemy 的命令验证了这一点。如果我尝试在使用 PySpark 内核的 EMR Notebook 中使用类似的命令,以便将已安装的库范围限定为笔记本本身,但由于自签名证书错误而失败。

我使用的命令是:

sc.install_pypi_package("pandas","https://<ARTIFACTORY_DOMAIN>/artifactory/api/pypi/pypi/simple/pandas/")

输出:

Collecting pandas Could not fetch URL https://<ARTIFACTORY_DOMAIN>/artifactory/api/pypi/pypi/simple/pandas/pandas/: There was a problem confirming the ssl certificate: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: self signed certificate in certificate chain (_ssl.c:1091) - skipping

我该如何解决这个问题或开始进行故障排除以了解出现问题的原因?

编辑:我也在使用 Livy 模拟,不确定是否需要为 Livy 本身配置 SSL 证书。

问题是我们的 EMR 集群是在主节点是唯一具有 /etc/pip.conf 文件的实例中设置的。在 EMR Studio Notebook 中使用 PySpark 内核时,在尝试使用 sc.install_pypi_package() 安装 Python 包时会使用任务节点。因此,我使用 bootstrap 脚本将 /etc/pip.conf 写入所有节点,并在实现后能够访问 Artifactory。 SSL 证书之前已经在任务节点上,因此只需要 pip.conf 文件。

为了确定我在任务节点上,我在 PySpark 内核笔记本会话中使用了以下代码。这与我们的 EMR 集群中任务节点的内部 IP 地址匹配。

import socket
socket.gethostbyname(socket.gethostname())