我無法從 Azure Databricks 建立與我的 Oracle 資料庫的連接,盡管它在 ADF 中作業,我可以在其中查詢表。但是 ADF 需要時間來過濾記錄,所以我仍在嘗試從 Databricks 連接。
我按照
嘗試建立連接時出現錯誤訊息: DPI-1047:找不到 64 位 Oracle 客戶端庫:“/databricks/driver/oracle_ctl//lib/libclntsh.so:無法打開共享物件檔案:沒有這樣的檔案或目錄”。
當我執行以下命令時
dbutils.fs.ls("/databricks/driver/")
沒有這樣的目錄
這促使我在這里發布一些問題:
這是否意味著初始化腳本沒有執行它的作業?
/databricks/driver/oracle_ctl是 dbutils.fs.ls的隱藏目錄嗎?
錯誤訊息指向/databricks/driver/oracle_ctl//lib/libclntsh.so,當我手動檢查下載的 oracle 客戶端時,雖然 libclntsh.so 存在于主目錄中,但沒有名為 lib 的檔案夾。databricks 檢查 libclntsh.so 的錯誤目錄是否存在問題?
這種聯系是否仍然適用于其他人?
連接語法: cx_Oracle.connect(user= user_name, password= password,dsn= IP ':' Port '/' DB_name)
從本地計算機內部連接時,上述語法可以正常作業。
uj5u.com熱心網友回復:
如果您的集群中沒有Oracle 即時客戶端,您將收到上述錯誤。
要解決azure databricks 中的上述錯誤,請遵循以下代碼:
%sh
mkdir -p /opt/oracle
cd /opt/oracle
wget https://download.oracle.com/otn_software/nt/instantclient/19600/instantclient-basic-windows.x64-19.6.0.0.0dbru.zip
unzip instantclient-basic-windows.x64-19.6.0.0.0dbru.zip
set ORACLE_HOME=%ORABAS%\instantclient_19_3
set TNS_ADMIN=%ORACLE_HOME%
set PATH=%ORACLE_HOME%;%PATH%

要創建初始化腳本,請使用以下代碼:
根據官方
要從PySpark中的oracle 資料庫中讀取資料,請遵循Emrah Mete 的這篇文章
有關更多資訊,請參閱此官方檔案:
https://docs.databricks.com/data/data-sources/oracle.html#oracle
uj5u.com熱心網友回復:
嘗試安裝 cx_Oracle 的最新主要版本 - 已重命名為 python-oracledb,請參閱發布公告。
此版本不需要 Oracle Instant Client。API 與 cx_Oracle 相同,但名稱顯然不同。
如果我理解說明,您的初始化腳本將執行以下操作:
/databricks/python/bin/pip install oracledb
應用程式代碼如下:
import oracledb
connection = oracledb.connect(user='scott', password=mypw, dsn='yourdbhostname/yourdbservicename')
with connection.cursor() as cursor:
for row in cursor.execute('select city from locations'):
print(row)
資源:
主頁:oracle.github.io/python-oracledb/
快速入門:快速入門 python-oracledb 安裝
檔案:python-oracle.readthedocs.io/en/latest/index.html
PyPI:pypi.org/project/oracledb/
來源:github.com/oracle/python-oracledb
升級:從 cx_Oracle 8.3 升級到 python-oracledb
uj5u.com熱心網友回復:
在 init-script中將路徑從“/databricks/driver/oracle_ctl/”更改為“/databricks/driver/oracle_ctl/instantclient” ,該錯誤不再出現。
請改用以下初始化腳本
dbutils.fs.put("dbfs:/databricks/<init-script-folder-name>/oracle_ctl.sh","""
#!/bin/bash
sudo apt-get install libaio1
wget --quiet -O /tmp/instantclient-basiclite-linuxx64.zip https://download.oracle.com/otn_software/linux/instantclient/instantclient-basiclite-linuxx64.zip
unzip /tmp/instantclient-basiclite-linuxx64.zip -d /databricks/driver/oracle_ctl/
mv /databricks/driver/oracle_ctl/instantclient* /databricks/driver/oracle_ctl/instantclient
sudo echo 'export LD_LIBRARY_PATH="/databricks/driver/oracle_ctl/instantclient/"' >> /databricks/spark/conf/spark-env.sh
sudo echo 'export ORACLE_HOME="/databricks/driver/oracle_ctl/instantclient/"' >> /databricks/spark/conf/spark-env.sh
""", True)
筆記:
上面的初始化腳本是由 databricks 員工建議的,可以在這里找到。
正如 Christopher Jones 在其中一條評論中提到的,cx_Oracle 最近升級到了 oracledb,有一個瘦版本和一個厚版本。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/492053.html
