python - 如何在 python 中的 SparkSession 上启用 ssl

标签 python pyspark aws-glue

我们正在使用 AWS Glue 连接到我们的 Postgres 数据库。

from pyspark.sql import SparkSession
from pyspark.conf import SparkConf
ss = SparkSession.builder.appName("profile-dump-dev").getOrCreate()
c = SparkConf()
ss.builder.config(conf=c)
...
x = ss.read.format("jdbc").option("url",url).option("query","select * from foo").load()
# The above line throws an exception ^

异常(exception)情况是:

FATAL: no pg_hba.conf entry for host "10.20.0.153", user "XXX"

在我们的 pg_hba.conf 中(这意味着必须启用 SSL):

hostssl X X X X

我们可以通过 psql 和 django 等工具毫无问题地访问 Postgres DB。 当我们通过正常方法访问数据库时,我们在 postgres 日志中看到:

connection authorized: user=XXX database=XXX SSL enabled (protocol=TLSv1.2, cipher=ECDHE-RSA-AES256-GCM-SHA384, compression=off)",,,,,,,,,"

简而言之,我们如何在使用 SparkSession 时启用 SSL?

根据此文档: https://jdbc.postgresql.org/documentation/head/ssl-client.html 我们可以将其传递给驱动程序:“ssl=true”。

但是如何将 ssl=true 传递给驱动程序呢?我们正在使用Python。

最佳答案

我们与 AWS Support 进行了交谈。这是使其工作的代码:

  remote_table = spark.read.format("jdbc")\
      .option("driver", driver)\
      .option("url", url)\
      .option("dbtable", table)\
      .option("user", user)\
      .option("password", password)\
      .option("ssl", True) \
      .option("sslmode", "require" ) \
      .load()

魔法就是 sslmode == require。 您不必明确使用任何证书或任何东西。我们根本没有任何自定义证书,这就是为什么我们的连接对象工作正常(它在幕后使用 SSL),但对于sparck,您明确需要说 ssl == True 和 sslmode == require。

关于python - 如何在 python 中的 SparkSession 上启用 ssl,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60674925/

相关文章:

python - 此代码的列表理解或更有效的方法

caching - 在 PySpark 环境中创建缓存的最佳方式

amazon-s3 - 尝试使用 AWS Glue 中的笔记本创建动态框架时出现错误 "java.io.FileNotFoundException: No such file or directory"

pyspark - 如何获得2个时间戳之间的时间差

apache-spark - AWS Glue 可以抓取 Delta Lake 表数据吗?

python - 如何动态地将 html 类添加到 Django 模板 'for-loop'?

python - 运行 `python -m unittest` 会更改在回溯中打印覆盖 `__name__` 的异常的方式

python - 一个应该用 Python 写出所有正确括号的程序

scala - 如何在 aws 胶中读取非 utf-8 编码的表?

scala - 如何覆盖 awsglue 作业中的 couchbase 查询超时?