Как включить ssl на SparkSession в python - PullRequest
0 голосов
/ 13 марта 2020

Мы используем AWS клей для подключения к нашей 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 ^

Исключение составляет:

FATAL: no pg_hba.conf entry for host "10.20.0.153", user "XXX"

В нашем файле pg_hba.conf (который означает, что SSL должен быть включен):

hostssl X X X X

Мы можем без проблем получить доступ к БД Postgres с помощью таких инструментов, как psql и django и так далее. Когда мы обращаемся к БД обычными методами, мы видим в журналах postgres:

connection authorized: user=XXX database=XXX SSL enabled (protocol=TLSv1.2, cipher=ECDHE-RSA-AES256-GCM-SHA384, compression=off)",,,,,,,,,"

Итак, в двух словах, как мы включаем SSL при использовании SparkSession?

Согласно это сделать c: https://jdbc.postgresql.org/documentation/head/ssl-client.html Мы можем передать это в драйвер: "ssl = true".

Но как передать ssl = true в драйвер? Мы используем python.

1 Ответ

0 голосов
/ 21 марта 2020

Мы говорили с AWS Поддержка. Вот код, который заставляет его работать:

  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()

Это волхвы c есть sslmode == require. Вам не нужно явно использовать какие-либо сертификаты или что-то еще. У нас нет никаких пользовательских сертификатов вообще, поэтому наш объект подключения работает нормально (он использует SSL под крышками), но для sparck вам явно нужно сказать ssl == True и sslmode == require.

...