You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用com.simba.spark.jdbc42驱动连接Azure Databricks时resultset.next()方法报错问题排查

解决Databricks JDBC驱动在大端Unix服务器上的Arrow字节序报错

问题根源

从你提供的报错栈信息里,核心错误已经明确指向:

java.lang.IllegalStateException: Arrow only runs on LittleEndian systems.

这说明你的Unix服务器是大端(BigEndian)硬件架构,而你使用的spark.jdbc42驱动依赖的Apache Arrow库仅支持小端(LittleEndian)系统。本地JDK11环境能正常运行,是因为绝大多数个人电脑/常规服务器(x86/x86_64架构)都是小端字节序,不存在这个限制。

解决方案

针对这个问题,你可以按以下步骤尝试解决:

  • 第一步:确认服务器字节序
    先通过终端命令验证服务器的字节序类型:

    lscpu | grep Endian
    # 或者用另一种方式验证
    echo $MACHTYPE
    

    如果输出包含big-endian,就坐实了是架构导致的问题。

  • 第二步:禁用Arrow格式(最直接有效的方法)
    修改你的JDBC连接URL,添加useArrow=false参数,强制驱动绕过Arrow库,改用传统的行数据解析逻辑。示例URL如下:

    String jdbcUrl = "jdbc:spark://<你的Databricks主机>:443/default;transportMode=http;ssl=1;httpPath=<你的HTTP路径>;AuthMech=3;UID=token;PWD=<你的令牌>;useArrow=false";
    

    这个参数会让驱动 fallback 到非Arrow的行集处理方式,彻底避开小端系统的限制。

  • 第三步:验证驱动版本兼容性
    确保你使用的spark.jdbc42驱动是与Databricks集群版本匹配的官方驱动。部分旧版本驱动对大端系统的兼容性较差,你可以尝试下载最新版的Databricks JDBC驱动替换现有版本,再配合useArrow=false参数使用。

  • 额外说明:JDK版本的影响
    你本地JDK11正常、服务器JDK1.8报错,核心原因不是JDK版本,而是服务器的字节序。但如果条件允许,可以尝试将服务器的JDK升级到11版本,部分新驱动在JDK11下对非Arrow模式的支持更稳定,但这不是必须的步骤。

内容的提问来源于stack exchange,提问作者Chet

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.27 17:23:10