org.postgresql.util.psqlexception:ssl错误:从azure databricks写入azure postgres citus时收到致命警报:握手失败

i86rm4rw  于 2021-05-27  发布在  Spark
关注(0)|答案(1)|浏览(838)

我正在尝试将pysparkDataframe写入azure postgres citus(hyperscale)。我使用的是最新的postgresjdbc驱动程序,我试着在databricks运行时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 我已经尝试了不同的参数在网址和下面的选项,以及,但没有运气到目前为止。但是,我可以使用我的本地计算机和使用psycopg2的databricks驱动程序/笔记本连接到此示例,azure postgres citus和databricks都位于同一个区域,并且azure postgres citus是公共的。

wkftcu5l

wkftcu5l1#

它通过覆盖驱动程序和执行程序的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密码替换为同样适用的空字符串。
当我将这个变量设置为executors(spark.executor.extrajavaoptions)时,它不会更改jvm中的默认变量。同样的情况不会发生在重写的驱动程序上,因此它开始工作。
注意:我们需要在读取变量之前编辑这个文件,因此init脚本是实现这一点的唯一方法。

相关问题