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

Azure Databricks作业生成文件检索及权限问题咨询

问题解答

核心问题分析

  1. 生成的文件会丢失:你当前代码把文件写到了/databricks/driver/路径下,这是作业运行时driver节点的本地文件系统。作业执行完成后,driver节点会被自动销毁,这些文件也会随之消失,不会被保存到关联的存储账户中。
  2. 存储账户job容器访问被拒是正常设计:Azure Databricks工作区关联的存储账户中,job容器属于Databricks服务托管的内部存储,用于存放作业日志、元数据等系统内容。Azure会自动添加拒绝分配(Deny Assignment),即使是组织管理员也无法直接访问,这是为了保护Databricks服务的正常运行,避免用户误操作篡改内部数据。

解决方案:修改代码保存文件到持久化存储

要保留生成的文件,需要将其写入持久化存储,推荐两种方式:

方式1:写入DBFS(Databricks文件系统)

DBFS是Databricks提供的分布式文件系统,数据会持久化存储在工作区关联的存储账户中(对应dbfs容器,而非job容器),作业结束后不会丢失。修改代码如下:

import json

# Parse job info
info = dbutils.notebook.entry_point.getDbutils().notebook().getContext().toJson()
info = json.loads(info)
RUN_ID = info.get("tags").get("multitaskParentRunId", "no_run_id")

# 写入DBFS路径,使用dbfs:/前缀
run_directory = f"/training_runs/{RUN_ID}"
dbutils.fs.mkdirs(f"dbfs:{run_directory}")

# 通过本地挂载点/dbfs/操作DBFS文件
with open(f"/dbfs{run_directory}/file.txt", "w") as file_:
    file_.write("Hello world :)")

方式2:写入自己管理的Azure存储账户(Blob/ADLS Gen2)

如果需要更灵活的权限控制,可以将文件写入自己创建的存储账户,避免依赖Databricks托管存储。示例代码(直接使用ABFS路径,需提前配置作业的存储访问权限):

import json

# Parse job info
info = dbutils.notebook.entry_point.getDbutils().notebook().getContext().toJson()
info = json.loads(info)
RUN_ID = info.get("tags").get("multitaskParentRunId", "no_run_id")

# 替换为自己的存储容器和账户名
abfs_path = f"abfss://<容器名>@<存储账户名>.dfs.core.windows.net/training_runs/{RUN_ID}"
dbutils.fs.mkdirs(abfs_path)

# 写入文件到ABFS路径
with open(f"/dbfs{abfs_path.lstrip('abfss:')}/file.txt", "w") as file_:
    file_.write("Hello world :)")

如何检索持久化后的文件

  • DBFS文件:
    • 通过Databricks UI:进入「数据」->「DBFS」,直接浏览下载
    • 通过Databricks CLI:使用databricks fs cp命令将文件下载到本地
    • 通过Notebook:用dbutils.fs.cp命令复制到其他存储位置
  • 自己的存储账户文件:
    • 使用Azure存储浏览器、Azure CLI或存储SDK直接访问,权限由你自主管理,不会出现拒绝分配的问题

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 13:20:51