使用dbx CLI部署Databricks工作流:冗余Artifact清理与复用问题
关于dbx CLI部署后DBFS冗余Artifact文件夹的处理方案
背景说明
我正在使用dbx CLI将工作流部署至Databricks平台,当前.dbx/project.json配置如下:
{ "environments": { "default": { "profile": "test", "storage_type": "mlflow", "properties": { "workspace_directory": "/Shared/dbx/projects/test", "artifact_location": "dbfs:/dbx/test" } } }, "inplace_jinja_support": false, "failsafe_cluster_reuse_with_assets": false, "context_based_upload_for_execute": false }
每次执行dbx deploy ...命令时,任务脚本都会被存储到DBFS的哈希命名文件夹中,多次部署会生成大量冗余文件夹,仅需保留最新的Artifact文件夹,旧文件夹已无使用价值。
问题与解决方案
1. 如何清理冗余的文件夹?
有两种可行方式:
- 手动清理:
用Databricks CLI执行命令列出目标路径下的所有哈希文件夹:
再用递归删除命令清理指定旧文件夹:databricks dbfs ls dbfs:/dbx/test
也可以直接在Databricks UI的DBFS浏览器中手动选中并删除冗余文件夹。databricks dbfs rm -r dbfs:/dbx/test/<哈希文件夹名> - 自动化脚本清理:
编写Python脚本调用Databricks CLI或API,遍历目标路径下的文件夹,按修改时间排序后删除除最新之外的所有文件夹。核心逻辑:- 执行
databricks dbfs ls --long dbfs:/dbx/test获取带修改时间的文件夹列表 - 解析输出,提取文件夹名称和修改时间
- 按修改时间倒序排序,保留最新的1个,删除其余
- 执行
2. 是否存在保留最近X个文件夹的保留策略或滚动策略?
dbx CLI本身没有内置的滚动保留策略,但可以通过自定义脚本+部署钩子实现:
- 编写清理脚本,逻辑为:遍历目标路径下的文件夹,按修改时间倒序排序,保留前X个,删除剩余文件夹
- 将脚本集成到部署流程中:比如在
dbx deploy命令后执行该脚本,或者在CI/CD流水线(如GitHub Actions、GitLab CI)中添加步骤,每次部署完成后自动触发清理
3. 是否可以在每次部署时复用同一个文件夹?
可以实现,有两种方式:
- 方式一:修改配置文件
将.dbx/project.json中的storage_type从mlflow改为dbfs,并保持artifact_location为固定路径(如dbfs:/dbx/test/fixed-deploy)。此时dbx会将资产上传到指定的固定路径,每次部署会覆盖原有文件,实现文件夹复用。 - 方式二:部署时指定固定路径
执行部署命令时添加--artifact-path参数,强制指定上传到固定路径:
该方式无需修改配置文件,每次部署都会覆盖指定路径下的文件,达到复用效果。dbx deploy --environment default --artifact-path dbfs:/dbx/test/fixed-deploy
内容的提问来源于stack exchange,提问作者jlim
相关产品推荐
相关产品推荐

