在工作中,我有一个Scala Databricks Notebook,它使用了许多库导入,包括来自Maven和一些JAR文件。我遇到的问题是,当我在此笔记本上计划作业时,它有时会失败(完全随机,但主要是 10 次运行中的 1 次),因为它在安装所有库之前执行单元。因此,作业失败,我必须手动启动它。这个Databricks产品的这种表现远非专业,因为我不能在生产中使用它,因为它有时会失败。
我试图在所有导入之前放置 1 分钟左右的Thread.Sleep()
,但它并没有改变任何东西。对于Python来说,有dbutils.library.installPyPI("library-name")
但是在Dbutils文档中没有Scala这样的东西。
那么有没有人遇到过同样的问题,如果是这样,你是如何解决的?
谢谢!
简单地说,对于生产计划作业,请使用New Job Cluster
并避免All Purpose Cluster
。
New Job Clusters
是在运行任务时创建和启动并在任务完成后立即终止的专用集群。在生产环境中,Databricks 建议使用新群集,以便每个任务在完全隔离的环境中运行。
在 UI 中,设置笔记本作业时,选择一个New Job Cluster
然后将所有依赖库添加到作业中。
New Job Cluster
的定价是不同的。我会说它最终更便宜。
注意:使用 Databricks 池来减少集群启动和自动缩放时间(如果一开始就存在问题)。