You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Azure Databricks定时作业执行耗时过长的优化咨询

优化Azure Databricks作业执行速度的方案

这种简单脚本在Databricks Jobs中耗时远超直接运行的情况,大多是集群启动/初始化开销Notebook作业的额外加载成本导致的,下面是几个针对性的优化方向:

1. 复用作业集群,避免重复启动

默认情况下,Databricks作业集群会在任务完成后立即销毁,下次运行时需要重新分配虚拟机、加载Databricks Runtime环境,这部分通常要花7-9秒左右——刚好是你看到的耗时大头。

解决方法:

  • 在作业配置的集群设置里,找到“Cluster reuse”选项,设置作业完成后集群的保留时长(比如15分钟、30分钟)。这样短时间内重复运行作业时,直接复用已启动的集群,跳过启动环节,速度会大幅提升。
  • 如果你的作业是周期性调度的,也可以考虑使用长期运行的交互式集群来执行作业(在作业配置中选择已有的交互式集群,而不是创建新的作业集群),但要注意成本控制。

2. 替换Notebook作业为Python脚本/Wheel作业

你现在是通过Notebook关联Python文件来执行,Notebook本身会有解析、加载内核的额外开销。直接提交Python脚本作业可以跳过这些步骤:

  • 在Databricks Jobs中创建新作业时,选择任务类型为“Python script”,直接上传你的Python文件或者指定DBFS路径,而不是通过Notebook关联。
  • 脚本中获取参数的方式可以保持不变(dbutils.widgets或者getArgument都支持),但不需要Notebook的额外加载步骤,启动速度会快很多。

3. 改用Serverless作业集群

如果你的工作区支持Serverless计算,可以尝试使用Serverless作业集群:

  • Serverless集群是Databricks托管的按需资源,启动速度通常比传统的作业集群快2-3倍,因为不需要等待虚拟机的分配和初始化,直接复用已准备好的Runtime环境。
  • 在作业配置的集群类型中选择“Serverless”,配置合适的实例规格(对于简单脚本,小规格实例足够)。

4. 调整集群规格,避免资源过剩

D8s_v3是8核32G的实例,对于你的简单脚本来说,资源严重过剩,反而可能因为大实例的分配和启动耗时更长。可以尝试:

  • 改用更小的实例规格,比如D4s_v3(4核16G)甚至D2s_v3(2核8G),小实例的启动速度通常更快,也能节省成本。
  • 确认集群只需要1个Worker(你的配置已经是1个,这点没问题),不要多余的节点。

5. 简化Notebook内容(如果必须保留Notebook作业)

如果因为某些原因必须用Notebook执行,尽量简化Notebook:

  • 不要在Notebook中导入不必要的库,只保留脚本必需的代码。
  • 把Python代码直接写在Notebook单元格里,而不是关联外部文件,减少文件加载的开销。
  • 检查Notebook有没有额外的初始化单元格(比如安装库、加载数据等),如果不需要就删除。

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

火山引擎 最新活动