当前位置: 首页 > 知识库问答 >
问题:

Azure Databricks中的cx\u Oracle

曹鸿风
2023-03-14

我无法从Azure Databricks建立到Oracle数据库的连接,尽管它在ADF中工作,我可以在那里查询表。但是ADF需要时间来过滤记录,所以我仍在尝试从Databricks连接。

我手动和使用init脚本遵循了这个Microsoft链接中的步骤,但错误似乎一直存在。

当我查看我的集群事件日志时,它说初始化脚本执行成功。

尝试建立连接时出现错误消息:DPI-1047:找不到64位Oracle客户端库:“/databricks/driver/Oracle\u ctl//lib/libclntsh.so:无法打开共享对象文件:没有这样的文件或目录”。

当我执行以下命令时

dbutils.fs.ls(“/databricks/driver/”)

没有这样的目录

这引发了我在这里发布一些问题:

>

  • 这是否意味着init脚本没有执行其工作?

    /databricks/driver/oracle\u ctl是dbutils.fs.ls的隐藏目录吗?

    错误消息指向/databricks/driver/oracle\u ctl//lib/libclntsh。因此,当我手动检查下载的oracle客户端时,没有名为lib-althought-libclntsh的文件夹。因此存在于主目录中。databricks是否为libclntsh.so检查了错误的目录?

    这种联系对其他人仍然有效吗?

    连接语法:cx\u Oracle。连接(user=user\u name,password=password,dsn=IP’:“Port”/“DB\u name)

    当从本地机器内部连接时,上述语法可以正常工作。

  • 共有3个答案

    徐绪
    2023-03-14

    请尝试安装cx_Oracle的最新主要版本,该版本已重命名为python oracledb,请参阅发布公告。

    此版本不需要Oracle Instant Client。API与cx_Oracle相同,但名称明显不同。

    如果我理解说明,您的init脚本将执行以下操作:

    /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

    司凡
    2023-03-14

    如果集群中没有Oracle instant client,则会出现上述错误。

    要解决azure数据库中的上述错误,请遵循以下代码:

    %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%
    

    要创建初始化脚本,请使用以下代码:

    根据官方文件,

    dbutils.fs.put("dbfs:/databricks/<init-script-folder>/oracle_ctl.sh","""
    #!/bin/bash
    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/
    sudo echo 'export LD_LIBRARY_PATH="/databricks/driver/oracle_ctl/"' >> /databricks/spark/conf/spark-env.sh
    sudo echo 'export ORACLE_HOME="/databricks/driver/oracle_ctl/"' >> /databricks/spark/conf/spark-env.sh
    """, True)
    

    要从PySpark中的oracle数据库读取数据,请阅读Emrah Mete的这篇文章

    有关更多信息,请参阅此官方文件:

    https://docs.databricks.com/data/data-sources/oracle.html#oracle

    申屠泉
    2023-03-14

    将初始化脚本中的路径从“/数据库/驱动程序/oracle_ctl/”更改为“/数据库/驱动程序/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)
    

    注意事项:

    >

    正如Christopher Jones在其中一条评论中提到的那样,cx_Oracle最近已升级到oracledb,具有瘦版和厚版。

     类似资料:
    • 基于行块分布函数的通用网页正文抽取:线性时间、不建DOM树、与HTML标签无关 对于Web信息检索来说,网页正文抽取是后续处理的关键。 虽然使用正则表达式可以准确的抽取某一固定格式的页面,但面对形形色色的HTML,使用规则处理难免捉襟见肘。能不能高效、准确的将一个页面的正文抽取出来,并做到在大规模网页范围内通用,这是一个直接关系上层应用的难题。 作者提出了《基于行块分布函数的通用网页正文抽取算法》

    • Scales the matrix Parameters xnumberamount to be scaled, with 1 resulting in no change ynumberamount to scale along the vertical axis.(Otherwise x appliesto both axes.) cxnumberhorizontal origin point

    • 问题内容: 我有一个python脚本(2.7),顶部有一些“有趣的”导入。我最初想使用py2exe将其编译成一个我可以更容易分发的exe。 我已经放弃,正在尝试使用cx- freeze。但是,我在那里也有问题。问题似乎是我添加到Python中的库(jinja2和restkit)。我在python目录./Lib/site-packages/Jinja2-2.6-py2.7.egg/jinja2和这里

    • 我的申请有什么问题?

    • 我setup.py密码是 谁能帮我解决这个问题。

    • 问题: 1.当我尝试安装在python或通过cmd它说: 错误:系统找不到路径:'C:\Program Files(x86)\Microsoft SDK\Windows\v8.1\lib' 正如您看到的,上面写着但我有。在我看来,这就是问题所在,但我该如何解决它呢? 2.我也下载了并在cmd中尝试了这个: python-mpip安装C:\Users\Super\Downloads\cx\u Fre