org.postgresql.util.PSQLException: ошибка SSL: получено фатальное предупреждение: handshake_failure при записи из Azure Databricks в Azure Postgres Citus

Я пытаюсь записать фрейм данных pyspark в Azure Postgres Citus (Hyperscale). Я использую последнюю версию драйвера 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-адресе, а также под опцией, но пока мне не повезло. Однако я могу подключиться к этому экземпляру с помощью моего локального компьютера и драйвера / записной книжки databricks с помощью psycopg2. Как Azure Postgres Citus, так и Databricks находятся в одном регионе, а Azure Postgres Citus является общедоступным.


person anshul_cached    schedule 13.09.2020    source источник


Ответы (1)


Он работал, перезаписывая свойства безопасности Java для драйвера и исполнителя.

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

Объяснение:

На самом деле происходит то, что переменная «безопасности» JVM по умолчанию считывает следующий файл (/databricks/spark/dbconf/java/extra.security), и в этом файле есть несколько Алгоритмы TLS, которые по умолчанию отключены. Это означает, что если я отредактирую этот файл и заменю шифры TLS, которые работают для PostGres citus, пустой строкой, которая также должна работать.

Когда я устанавливаю эту переменную для исполнителей (spark.executor.extraJavaOptions), она не меняет переменные по умолчанию из JVM. Этого не происходит с драйвером, который перезаписывает и поэтому начинает работать.

Примечание. Нам нужно отредактировать этот файл до того, как переменная будет прочитана, и поэтому сценарий инициализации - единственный способ сделать это.

person anshul_cached    schedule 15.09.2020
comment
Для справки, отключенные алгоритмы по умолчанию в Databricks 7.3 следующие: jdk.tls.disabledAlgorithms = SSLv3, RC4, DES, MD5withRSA, DH keySize ‹1024, EC keySize‹ 224, 3DES_EDE_CBC, anon, NULL, GCM - - person Carlos David Peña; 12.02.2021