azure - org.postgresql.util.PSQLException : SSL error: Received fatal alert: handshake_failure while writing from Azure Databricks to Azure Postgres Citus

标签 azure apache-spark pyspark azure-databricks azure-postgresql

我正在尝试将 pyspark 数据帧写入 Azure Postgres Citus(超大规模)。 我正在使用最新的 Postgres JDBC 驱动程序,并尝试在 Databricks Runtime 7,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 Postgres Citus 是公共(public)的。

最佳答案

它的工作原理是覆盖驱动程序和执行程序的 java 安全属性

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

说明:

实际情况是,JVM 的“security”变量默认读取以下文件 (/databricks/spark/dbconf/java/extra.security) 并在此文件中默认情况下禁用一些 TLS 算法。这意味着如果我编辑此文件并将适用于 PostGres citus 的 TLS 密码替换为也应该适用的空字符串。

当我将此变量设置为执行程序 (spark.executor.extraJavaOptions) 时,它不会更改 JVM 中的默认变量。对于覆盖的驱动程序不会发生同样的情况,因此它开始工作。

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

关于azure - org.postgresql.util.PSQLException : SSL error: Received fatal alert: handshake_failure while writing from Azure Databricks to Azure Postgres Citus,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63868745/

相关文章:

c# - 组合多个键以在 Cosmos db 中创建合成分区键

apache-spark - 非分区 Parquet 数据的谓词下推

python - 在 PySpark 日期列中获取每年的最新日期

python - Spark 使用 Python : save RDD output into text files

python - 在pyspark中创建两个时间戳之间的时间戳数组

azure - MSB1003 : Specify a project or solution file. 当前工作目录不包含项目或解决方案文件

deployment - 无法下载云服务测试服务调用中实例 abc_webrole_IN_0 的 RDP 文件

azure - Azure 应用服务上的 Asp.Net Core 2.2 TLS 1.2 支持

logging - PySpark 日志记录?

java - 给定列名列表,如何选择数据集的多列?