繁体   English   中英

如何在AWS SageMaker(Jupyter Notebook)中使用cx_Oracle

[英]How to use cx_Oracle within AWS SageMaker (Jupyter Notebook)

我按照官方安装指南,但到目前为止还没有运气。 我想知道cx_Oracle 可以在AWS SageMaker的虚拟环境中运行。 到目前为止我使用的步骤是:

  1. 创建/opt/oracle目录并解压缩其中的基本instantclient。
  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_PATHexport 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的详细信息吗? 另外,是否有另一种选择通过Python和AWS从oracle服务器中提取数据?

您好,感谢您使用SageMaker!

经过一番努力,我终于找到了一系列允许我从SageMaker笔记本实例中查询Oracle 12数据库的步骤。 以下是我采取的步骤:

  1. 我使用Amazon RDS创建了一个Oracle 12数据库用于测试目的。 (如果您已经拥有Oracle数据库,您当然可以跳过此步骤。)
  2. 我按照此处的说明下载了Oracle 12 Instant Client RPM 请注意,您需要一个Oracle帐户才能下载此文件。
  3. 我从JupyterLab中将RPM上传到我的SageMaker Notebook实例。 请注意,在继续下一步之前,可能需要2-3分钟才能完全上传。 (我最初在运行安装时遇到问题,因为上传仍在进行中。)
  4. 我按照Oracle指令中的规定从Jupyter终端运行了以下所有命令:
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
  1. 然后我安装了cx_Oracle库:
source activate python3
pip install cx_Oracle --upgrade
  1. 最后,我使用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:侦听器没有在CONNECT_DATA中给出SERVICE_NAME,直到我在连接字符串的末尾指定了/ ORCL。

如果需要经常执行这些步骤,可以在SageMaker Lifecycle Configuration脚本中添加Oracle客户端的安装和配置。 我没有测试过这种情况,但可能值得一试!

最后一件事,我在你的问题中注意到你使用的是Oracle 18客户端。 我没有测试那个确切的场景,因为我只能访问Oracle 12数据库。 但是,Oracle 12客户端也应该能够连接到Oracle 18数据库。

最好,凯文

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM