Databricks dbx execute与launch命令差异及可追踪任务执行咨询
问题描述
我有一个需要在Databricks上运行若干入口点的项目,使用dbx工具实现,对应的deployment.yaml配置如下:
build: python: "poetry" environments: default: workflows: - name: "test" existing_cluster_id: "my-culster-id" spark_python_task: python_file: "file://tests/test.py"
我可以通过以下命令运行测试脚本:
poetry run dbx execute --cluster-id=my-culster-id test
但该方式为交互式运行,除查看集群日志外无法在Databricks上检索已执行的代码记录。因此我尝试使用deploy和launch命令创建并运行Databricks正式任务:
poetry run dbx deploy test && poetry run dbx launch test
但任务执行失败,报错信息如下:
Run result unavailable: job failed with error message Library installation failed for library due to user error. Error messages: 'Manage' permissions are required to modify libraries on a cluster
请问从本地机器运行可在Databricks上追踪的任务,最佳方式是什么?
最佳实践方案
报错原因分析
使用deploy + launch命令时,dbx会自动尝试将项目依赖库安装到你指定的现有集群中,但你的账号没有该集群的Manage权限,导致库安装失败。
方案一:使用作业集群(推荐)
改用作业集群(临时专属集群)替代现有集群,dbx会为任务创建独立的临时集群,任务结束后自动销毁,既不需要现有集群的Manage权限,又能在Databricks作业页面完整追踪任务执行记录。
修改deployment.yaml配置:
build: python: "poetry" environments: default: workflows: - name: "test" # 替换为作业集群配置,根据你的需求调整参数 job_cluster: new_cluster: spark_version: "13.3.x-scala2.12" # 替换为你的目标Spark版本 node_type_id: "Standard_DS3_v2" # 替换为你的节点类型 num_workers: 1 # 根据任务需求调整 worker 数量 spark_python_task: python_file: "file://tests/test.py"
执行命令部署并启动任务:
poetry run dbx deploy test && poetry run dbx launch test
任务运行后,可直接在Databricks的作业页面找到该任务的执行记录、日志和结果。
方案二:保留现有集群(需权限或预安装依赖)
如果必须使用现有集群,可通过以下两种方式解决:
- 申请集群权限:联系集群管理员为你的账号添加集群的
Manage权限,允许安装依赖库,之后即可正常使用deploy + launch命令。 - 预安装依赖:让管理员预先在现有集群中安装好项目所需的所有依赖库,然后修改
deployment.yaml,禁止dbx自动上传和安装库:
之后执行build: python: "poetry" environments: default: workflows: - name: "test" existing_cluster_id: "my-culster-id" skip_package_upload: true # 禁止自动上传项目包 spark_python_task: python_file: "file://tests/test.py"deploy + launch命令即可,任务记录同样会保存在Databricks作业中。
内容的提问来源于stack exchange,提问作者Robin
相关产品推荐
相关产品推荐

