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

自定义Docker镜像部署Databricks通用计算集群时SHA1摘要错误排查

解决Databricks自定义镜像启动的SHA1 Digest错误及目录结构问题

核心错误分析

java.lang.SecurityException: SHA1 digest error for META-INF/services/java.sql.Driver 报错的本质是:Databricks Runtime在预加载JDBC驱动时,校验镜像中JAR包的META-INF/services/java.sql.Driver文件完整性失败。通常由以下原因导致:

  • 镜像中包含了与Databricks Runtime 16.3自带JDBC驱动冲突的第三方JAR包
  • 自定义打包的JDBC驱动JAR中,该服务文件被篡改或签名校验失效

针对性解决步骤

  • 移除冲突JDBC驱动:检查镜像中是否打包了mysql-connector、postgresql等JDBC驱动。Databricks Runtime 16.3默认包含常用JDBC驱动,无需重复打包,直接从Dockerfile中删除相关ADD/COPY指令。
  • 修复JAR签名校验:若必须保留自定义JDBC驱动,使用官方未修改的驱动包,避免手动修改META-INF/services/java.sql.Driver文件。若自行打包驱动,确保JAR的SHA1签名完整。
  • 禁用预加载逻辑:在集群配置的"环境变量"中添加DB_PRELOAD_JDBC_DRIVERS=false,跳过DriverDaemon的JDBC预加载流程,由Spark原生逻辑处理驱动加载。

目录结构要求说明

Databricks通用计算集群对自定义镜像的目录结构有强制要求:

  • Spark、Hadoop等核心组件必须安装在/databricks目录下(如/databricks/spark、/databricks/hadoop),因为Databricks的启动脚本、环境变量均基于该路径配置。若路径不匹配,集群无法正确加载核心服务。
  • 镜像的CMD/ENTRYPOINT确实会被Databricks忽略,集群会使用自带的/databricks/scripts/start.sh初始化节点,但前提是核心组件路径符合要求。

调整后的Dockerfile示例片段

# 安装Spark到Databricks指定路径
RUN wget https://archive.apache.org/dist/spark/spark-3.5.0/spark-3.5.0-bin-hadoop3.tgz \
    && tar -xzf spark-3.5.0-bin-hadoop3.tgz \
    && mv spark-3.5.0-bin-hadoop3 /databricks/spark \
    && rm spark-3.5.0-bin-hadoop3.tgz

# 配置符合Databricks要求的环境变量
ENV SPARK_HOME=/databricks/spark
ENV HADOOP_HOME=/databricks/hadoop
ENV PATH=$PATH:$SPARK_HOME/bin:$HADOOP_HOME/bin

验证流程

  1. 按上述调整修改Dockerfile,重新构建镜像
  2. 上传镜像到Databricks支持的镜像仓库
  3. 创建通用计算集群时选择该镜像,添加DB_PRELOAD_JDBC_DRIVERS=false环境变量(可选,若已移除冲突驱动可省略)
  4. 启动集群验证是否报错

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 08:03:16