Как использовать cx_Oracle в AWS SageMaker (Jupyter Notebook) - PullRequest
0 голосов
/ 29 марта 2019

Я следовал официальному руководству по установке , но пока мне не повезло. Интересно, может ли cx_Oracle работать в виртуальной среде AWS SageMaker. Шаги, которые я использовал до сих пор:

  1. Создайте каталог /opt/oracle и распакуйте в него базовый мгновенный клиент.
  2. sudo yum install libaio
  3. sudo sh -c "echo /opt/oracle/instantclient_18_3 > /etc/ld.so.conf.d/oracle-instantclient.conf" и sudo ldconfig
  4. И, наконец, экспортировал LD_LIBRARY_PATH с: export LD_LIBRARY_PATH=/opt/oracle/instantclient_18_3:$LD_LIBRARY_PATH

При попытке установить соединение внутри ноутбука с connection = cx_Oracle.connect(usr + '/' + pwd + '@' + url), я получаю код ошибки DPI-1047, который говорит, что libclntsh.so не может быть открыт, однако библиотека имеет значение в /opt/oracle папка. В качестве другого варианта, когда я запускаю то же соединение через консоль Python терминала, я получаю код ошибки ORA-01804, который говорит, что файлы часового пояса не были прочитаны должным образом, что я тоже пытаюсь исправить, но подозреваемый связан с cx_Oracle не находит свою библиотечную папку. (Теперь объясните мне: почему миллиардерной компании так сложно создать приличный импорт и установку библиотеки?)

Есть ли шаг, который я пропускаю? Есть ли какая-то деталь в AWS SageMaker, которую я должен учитывать? Кроме того, есть ли другой вариант для извлечения данных с сервера Oracle через Python и AWS?

1 Ответ

0 голосов
/ 11 апреля 2019

Привет и спасибо за использование SageMaker!

После некоторых усилий я наконец-то смог выяснить последовательность шагов, которые позволили мне запросить базу данных Oracle 12 из экземпляра блокнота SageMaker.Вот шаги, которые я предпринял:

  1. Я создал базу данных Oracle 12, используя Amazon RDS для тестирования.(Конечно, вы можете пропустить этот шаг, если у вас уже есть база данных Oracle.)
  2. Я скачал Oracle 12 Instant Client RPM , как описано здесь .Обратите внимание, что для загрузки этого файла вам понадобится учетная запись Oracle.
  3. Я загрузил RPM в свой экземпляр SageMaker Notebook из JupyterLab.Обратите внимание, что для полной загрузки может потребоваться 2-3 минуты, прежде чем перейти к следующему шагу.(У меня изначально были проблемы с запуском установки, потому что загрузка все еще продолжалась.)
  4. Я выполнил все следующие команды с терминала Jupyter, как предписано в инструкциях Oracle:
cd SageMaker

sudo yum install oracle-instantclient12.2-basic-12.2.0.1.0-1.x86_64.rpm
sudo sh -c "echo /usr/lib/oracle/12.2/client64/lib > /etc/ld.so.conf.d/oracle-instantclient.conf"
sudo ldconfig
sudo mkdir -p /usr/lib/oracle/12.2/client64/lib/network/admin

# Restart Jupyter...
sudo restart jupyter-server
Затем я установил библиотеку cx_Oracle :
source activate python3
pip install cx_Oracle --upgrade
Затем, наконец, я создал новую записную книжку, используя ядро ​​conda_python3:
import cx_Oracle
db = cx_Oracle.connect("my_username/my_password@my-rds-instance.ccccccccccc.us-east-1.rds.amazonaws.com/ORCL")

# Example query
cursor = db.cursor()
for row in cursor.execute('select * from DBA_TABLES'):
  print(row)

... и это сработало!

Обратите внимание, что мне потребовалось несколько попытоквыяснить точную строку подключения, которая может отличаться в зависимости от того, как настроена ваша база данных.К сожалению, сообщения об ошибках было трудно понять - в моем случае у меня была ошибка ORA-12504: TNS: слушателю не было присвоено SERVICE_NAME в CONNECT_DATA , пока я не указал / ORCL в концеСтрока подключения.

Если вам нужно часто выполнять эти шаги, вы можете добавить установку и настройку клиента Oracle в сценарий SageMaker Lifecycle Configuration .Я не тестировал этот сценарий, но, возможно, стоит попробовать!

И последнее, что я заметил в вашем вопросе, что вы используете клиент Oracle 18.Я не проверял этот точный сценарий, так как у меня есть доступ только к базе данных Oracle 12.Однако клиент Oracle 12 также должен иметь возможность подключаться к базе данных Oracle 18.

Best, Кевин

...