Как раздать JDBC банку на кластере Cloudera? - PullRequest
0 голосов
/ 21 мая 2019

Я только что установил новый Spark 2.4 из CSD на мой CDH кластер (28 узлов) и пытаюсь установить драйвер JDBC , чтобы читать данные из базы данных в блокноте Jupyter. Я скачал и скопировал его на одном узле в папку / jars, однако мне кажется, что я должен сделать то же самое на каждом хосте (!). В противном случае я получаю следующую ошибку от одного из работников:

java.lang.ClassNotFoundException: com.microsoft.sqlserver.jdbc.SQLServerDriver

Есть ли какой-нибудь простой способ (без написания сценариев bash) распространять файлы jar с пакетами по всему кластеру? Хотел бы я, чтобы Spark мог распространять его сам (или, может быть, так и есть, и я не знаю, как это сделать).

1 Ответ

2 голосов
/ 22 мая 2019

Spark имеет читатель формата jdbc, который вы можете использовать.

запустите оболочку scala, чтобы убедиться, что ваш драйвер MS SQL Server находится в вашем classpath

пример

Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver")

Если класс драйвера не отображается, убедитесь, что вы поместили банку на краевой узел и включили его в путь к классу, где вы инициализируете сеанс

пример

bin/spark-shell --driver-class-path postgresql-9.4.1207.jar --jars postgresql-9.4.1207.jar

Подключение к вашему MS SQL Server через Spark jdbc

Пример с использованием Spark Python

# option1
jdbcDF = spark.read \
    .format("jdbc") \
    .option("url", "jdbc:postgresql:dbserver") \
    .option("dbtable", "schema.tablename") \
    .option("user", "username") \
    .option("password", "password") \
    .load()

# option2
jdbcDF2 = spark.read \
    .jdbc("jdbc:postgresql:dbserver", "schema.tablename",
          properties={"user": "username", "password": "password"})

Особенности и дополнительные способы компиляции строк подключения можно найти здесь

https://spark.apache.org/docs/latest/sql-data-sources-jdbc.html

вы упомянули jupyter ... если вы все еще не можете заставить работать вышеупомянутое, попробуйте установить несколько переменных env через это сообщение (хотя не можете подтвердить, работает ли это)

https://medium.com/@thucnc/pyspark-in-jupyter-notebook-working-with-dataframe-jdbc-data-sources-6f3d39300bf6

в конце дня все, что вам действительно нужно, это класс драйвера, размещенный на пограничном узле (клиент, с которого вы запускаете спарк), и добавьте его в ваш путь к классу, затем установите соединение и распараллелите ваш фрейм данныхмасштабировать исполнителяce, поскольку jdbc из rdbms читает данные как один поток, следовательно, 1 раздел

...