Azure Databricks中Spark-Submit提交.NET Core3.1作业失败:INIT_SCRIPT_FAILURE
问题诊断与解决方案
核心错误定位
集群启动失败直接源于初始化脚本/Shared/db-init.sh执行返回非零状态,结合你的环境配置,重点排查以下几个方向:
1. 发布环境不匹配(win-x64 vs Linux节点)
你使用VS2019发布时选择了win-x64自包含模式,但Databricks运行时10.4基于Linux系统,Windows二进制文件无法在Linux节点上运行,这会直接导致后续程序执行失败,甚至干扰初始化脚本逻辑。
修复步骤:
- 重新发布项目:在VS2019中选择「自包含」模式,运行时目标改为
linux-x64,重新生成Zip包后替换DBFS路径/dbfs/spark-dotnet/HelloSparkCore31.zip下的旧文件。
2. 初始化脚本权限与逻辑错误
Workspace中的脚本默认可能无执行权限,或脚本内部路径、命令存在错误:
排查与修复:
- 给脚本添加执行权限:在Databricks笔记本中执行以下命令:
chmod +x /dbfs/spark-dotnet/db-init.sh chmod +x /dbfs/spark-dotnet/install-worker.sh - 检查
db-init.sh内容,确保关键逻辑正确(参考微软官方脚本示例):#!/bin/bash set -ex WORKER_DIR=/opt/microsoft/spark/worker mkdir -p "$WORKER_DIR" # 解压Linux版本的Spark Worker包 tar xzf /dbfs/spark-dotnet/Microsoft.Spark.Worker.netcoreapp3.1.linux-x64-2.1.1.tar.gz -C "$WORKER_DIR" # 设置环境变量 echo "export SPARK_DOTNET_WORKER_DIR=$WORKER_DIR" >> /databricks/spark/conf/spark-env.sh - 确保脚本中所有文件路径均指向DBFS的正确位置(如
/dbfs/spark-dotnet/xxx),避免使用相对路径。
3. 初始化脚本路径映射问题
集群配置中指定的/Shared/db-init.sh是Workspace路径,在Linux节点上实际映射为/dbfs/FileStore/shared_uploads/下的对应目录,若脚本内部引用路径错误会导致文件找不到。
验证方法:
- 进入集群详情页 → 点击「Event logs」→ 定位「Init script failed」相关日志,查看具体错误输出(如命令执行失败、文件不存在、权限被拒等),精准定位问题行。
4. 版本兼容性确认
你使用的Spark 3.2.1与microsoft-spark-3-2_2.12-2.1.1.jar版本匹配,但需确认DBFS中的jar包和Worker包未损坏,可重新下载官方包替换。
修复后完整流程
- 重新发布适配Linux的项目包;
- 给初始化脚本添加执行权限;
- 修正
db-init.sh的路径与逻辑; - 重启集群并重新提交作业。
内容的提问来源于stack exchange,提问作者Morshed
相关产品推荐
相关产品推荐

