Чтение и запись в MYSQL в AWS Glue

введите здесь описание изображения Я могу подключиться к MYSQL при локальном запуске кода Pyspark в записной книжке juypter, но с тем же кодом. Я получаю сообщение об ошибке связи в AWS Glue во время выполнения кода. Я добавил MySQL jar в файлы jar, необходимые при создании задания в AWS Glue.

Чтение из MYSQL

dataframe_mysql = sqlContext.read.format (jdbc) .option (url, jdbc: mysql: // localhost / read) .option (driver, com.mysql.jdbc.Driver) .option (dbtable, student) .option (user, корень) .option (пароль, корень) .load ()

Запись в MYSQL

df = sc.parallelize ([[25, 'Прем'],

                  [20, 'Kate'],

                 [20, 'Kate'],

                  [40, 'Cheng']]).toDF(["Depy_id","Dept_name"])

df.write.format ('jdbc'). options (

  url='jdbc:mysql://localhost/test',

  driver='com.mysql.jdbc.Driver',

  dbtable='dept',

  user='root',

  password='root').mode('overwrite').save()

person TEJASWAKUMAR    schedule 29.12.2018    source источник
comment
Можете ли вы проверить соединение под соединениями и посмотреть, успешно ли оно?   -  person Prabhakar Reddy    schedule 29.12.2018
comment
Я не понял. что вы имеете в виду под тестом соединения под соединениями.   -  person TEJASWAKUMAR    schedule 29.12.2018
comment
Консоль AWS Glue - ›Базы данных -› Подключения - ›Выберите соединение, используемое, созданное для задания ETL -› Щелкните Проверить соединение. Вы можете проверить соединение, следуя этой навигации.   -  person Prabhakar Reddy    schedule 29.12.2018
comment
моя работа создана специально написанным скриптом pyspark. Я не устанавливал никакого соединения в AWS.   -  person TEJASWAKUMAR    schedule 29.12.2018
comment
Можете ли вы создать его, добавить в задание Glue и повторить попытку.   -  person Prabhakar Reddy    schedule 29.12.2018


Ответы (2)


Обратите внимание, что вы должны предоставить действующий URL-адрес базы данных, а не локальный хост. Я считаю, что ваш ноутбук jupyter был запущен локально на ноутбуке в той же локальной среде, где работает ваш mysql.

AWS Glue работает в среде AWS и за кулисами запускает количество экземпляров EC2 в зависимости от конфигурации DPU. Если ваш URL-адрес настроен как LOCALHOST, то экземпляр EC2, на котором выполняется код pyspark, будет искать базу данных mysql на том же узле.

Убедитесь, что у вас есть действующий общедоступный IP-адрес для базы данных mysql, и попробуйте настроить соединение в AWS Glue, как предлагает bdcloud, и повторите попытку. Если вы не хотите создавать соединение, вы можете жестко закодировать параметры соединения в коде и повторить попытку. Если вы не можете получить общедоступный IP-адрес для установленной базы данных mysql, возможно, вы можете попробовать настроить RDS Mysql на AWS и использовать его для тестирования.

Пример фрагмента кода:

conn = mysql.connector.connect(host=url, user=uname, password=pwd, database=dbase)
cur = conn.cursor()

insertQry = "INSERT INTO emp (id, emp_name, dept, designation, address1, city, state, active_start_date, is_active) SELECT (SELECT coalesce(MAX(ID),0) + 1 FROM atlas.emp) id, tmp.emp_name, tmp.dept, tmp.designation, tmp.address1, tmp.city, tmp.state, tmp.active_start_date, tmp.is_active from EMP_STG tmp ON DUPLICATE KEY UPDATE dept=tmp.dept, designation=tmp.designation, address1=tmp.address1, city=tmp.city, state=tmp.state, active_start_date=tmp.active_start_date, is_active =tmp.is_active ;"

n = cur.execute(insertQry)
print (" CURSOR status :", n)

См. Раздел подключений AWS Glue:  введите описание изображения здесь

person Yuva    schedule 30.12.2018

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

person TEJASWAKUMAR    schedule 03.01.2019