簡體   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