【问题标题】:('01000', "[01000] [unixODBC][Driver Manager]Can't open lib '/opt/simba/spark/lib/64/libsparkodbc_sb64.so' : file not found (0) (SQLDriverConnect)")('01000',“[01000] [unixODBC][驱动程序管理器]无法打开库'/opt/simba/spark/lib/64/libsparkodbc_sb64.so':找不到文件(0)(SQLDriverConnect)”)
【发布时间】:2021-10-15 01:51:17
【问题描述】:

我试图让 Databricks ODBC 驱动程序在 Golang 上运行。我按照https://github.com/alexbrainman/odbc 上的说明设置了 Go 库和系统库。

我没有设置 MSSQL ODBC 驱动程序,而是安装了 Databricks 的 ODBC 驱动程序并将系统配置为使用它。我重新使用了一个 mssql_test.go 文件来创建一个测试平台来测试与 Databricks 的连接,使用我使用 guide from their website 构建的 DSN/连接字符串。

但是,当尝试连接到数据库时,我得到了错误:

('01000', "[01000] [unixODBC][Driver Manager]Can't open lib '/opt/simba/spark/lib/64/libsparkodbc_sb64.so' : file not found (0) (SQLDriverConnect)")

无论我如何更改连接字符串、LD_LIBRARY 路径或其他任何内容,我似乎都无法正常工作。它反复给出这个错误,即使我在 Go 中对这个文件执行os.Stat(),我也可以看到它清楚地存在于执行环境中。

我在 M1 Macbook 上的 Debian linux 容器用户 docker 中运行 Go/驱动程序。

【问题讨论】:

    标签: odbc databricks arm64


    【解决方案1】:

    在这种情况下,找不到文件的原因是没有为ARM编译驱动程序。这个post on Github 说明了这个问题。

    我们可以通过在库上运行 file 来确认。它产生...

    $> file /opt/simba/spark/lib/64/libsparkodbc_sb64.so
    /opt/simba/spark/lib/64/libsparkodbc_sb64.so: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, not stripped
    

    你可以看到它是为 x86-64 编译的,但平台实际上是 ARM。不好!

    有几个不同的选项可以解决这个问题:

    1. 如果您有驱动程序的源代码,请重新编译驱动程序以针对 ARM。
    2. 如果您在 docker 上构建,您可能能够重建您的 docker 容器以改用 x86 平台。您可以将 --platform linux/amd64 构建标志添加到您的 Dockerfile(例如 FROM --platform=linux/amd64 golang:1.17 或您的构建命令)。
    3. 在 x86 环境中构建/测试/部署您的代码。

    对于 Databricks,他们已经意识到了这个问题,并且即将推出基于 ARM 的驱动程序。

    【讨论】:

    • Databricks 尚未发布基于 ARM 的驱动程序,对吗?当你知道它已经发布时,你会在这里发布吗? (这很有帮助,谢谢!)
    • 有人告诉我要到明年年初。很高兴我的回答对你有用。如果我收到 databricks 人员的回复,我会尽量记住再次回答我自己的问题。
    • 您是否获得了有关驱动程序 ARM 版本的任何更新?
    • @DrissAmri 不,抱歉,我通过电子邮件发送了我在 databricks 的联系人,但他没有回复。
    猜你喜欢
    • 1970-01-01
    • 2021-05-15
    • 2014-05-24
    • 2013-12-19
    • 1970-01-01
    • 2021-10-16
    • 1970-01-01
    • 2018-08-24
    • 1970-01-01
    相关资源
    最近更新 更多