Использование JDBC-источника Postgresql с Apache Spark на EMR - PullRequest
0 голосов
/ 12 января 2019

У меня работает существующий кластер EMR, и я хочу создать DF из базы данных Postgresql.

Для этого, похоже, вам нужно изменить spark-defaults.conf с обновленным spark.driver.extraClassPath и указать на соответствующий JAR-файл PostgreSQL, который уже был загружен на главные и подчиненные узлы, или Вы можете добавить их в качестве аргументов к заданию spark-submit.

Поскольку я хочу использовать существующую записную книжку Jupyter для обработки данных, и не хочу перезапускать кластер, какой самый эффективный способ решить эту проблему?

Я попробовал следующее:

  1. Создать новый каталог (/ usr / lib / postgresql / на главном и подчиненном устройствах и скопировать в него jar PostgreSQL. (Postgresql-9.41207.jre6.jar)

  2. Отредактировано spark-default.conf для включения подстановочного знака

    spark.driver.extraClassPath  :/usr/lib/postgresql/*:/usr/lib/hadoop/hadoop-aws.jar:/usr/share/aws/aws-java-sdk/*:/usr/share/aws/emr/emrfs/conf:/$
    
  3. Попытка создать фрейм данных в ячейке Jupyter, используя следующий код:

    SQL_CONN = "jdbc:postgresql://some_postgresql_db:5432/dbname?user=user&password=password"
    spark.read.jdbc(SQL_CONN, table="someTable", properties={"driver":'com.postgresql.jdbc.Driver'})
    

Я получаю ошибку Java, как показано ниже:

Py4JJavaError: An error occurred while calling o396.jdbc.
: java.lang.ClassNotFoundException: com.postgresql.jdbc.Driver

Помощь оценена.

Ответы [ 2 ]

0 голосов
/ 14 января 2019

Я думаю, вам не нужно копировать postgres jar в подчиненные, так как программа драйвера и менеджер кластера позаботятся обо всем. Я создал фрейм данных из внешнего источника Postgres следующим образом:

Скачать jar драйвера postgres :

cd $HOME && wget https://jdbc.postgresql.org/download/postgresql-42.2.5.jar

Создать фрейм данных :

atrribute = {'url' : 'jdbc:postgresql://{host}:{port}/{db}?user={user}&password={password}' \
        .format(host=<host>, port=<port>, db=<db>, user=<user>, password=<password>),
                 'database' : <db>,
                 'dbtable' : <select * from table>}
 df=spark.read.format('jdbc').options(**attribute).load()

Отправить на поисковую работу: Добавьте загруженный jar-файл в путь к классу драйвера при отправке задания spark.

--properties spark.driver.extraClassPath=$HOME/postgresql-42.2.5.jar,spark.jars.packages=org.postgresql:postgresql:42.2.5 
0 голосов
/ 12 января 2019

Проверьте репозиторий github Driver . Путь к классу выглядит примерно так org.postgresql.Driver. Попробуйте использовать то же самое.

...