org.postgresql.util.PSQLException:SSL错误:收到致命警报:从Azure Databr



我正在尝试将pyspark数据帧写入Azure Postgres Citus(Hyperscale(。我正在使用最新的PostgresJDBC驱动程序,并尝试在DatabricksRuntime7,6,5上进行编写。

df.write.format("jdbc").option("url","jdbc:postgresql://<HOST>:5432/citus?user=citus&password=<PWD>&sslmode=require" ).option("dbTable", table_name).mode(method).save()

这是运行以上命令后得到的结果org.postgresql.util.PSQLException: SSL error: Received fatal alert: handshake_failure

我已经在URL中尝试了不同的参数,并在选项下显示,但到目前为止运气不佳。但是,我可以使用本地机器和使用psycopg2的databricks驱动程序/笔记本连接到此实例Azure Postgres Citus和Databricks都在同一地区,Azure Postgress Citus是公共的。

它通过覆盖驱动程序和执行程序的java安全属性来工作

spark.driver.extraJavaOptions -Djava.security.properties=spark.executor.extraJavaOptions -Djava.security.properties=

解释:

事实上,JVM的"安全"变量默认读取以下文件(/databricks/spark/dbconf/java/extra.security(,并且在该文件中,一些TLS算法默认被禁用。这意味着,如果我编辑这个文件,并将适用于PostGres-citus的TLS密码替换为一个应该也有效的空字符串。

当我将这个变量设置为executors(spark.executor.extraJavaOptions(时,它不会更改JVM中的默认变量。同样的情况不会发生在重写的驱动程序上,因此它开始工作。

注意:在读取变量之前,我们需要编辑这个文件,因此init脚本是实现这一点的唯一方法。

最新更新