我们正在使用 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/