在数据块上更新 jar 作业
Updating jar job on databricks
我有一个共享集群,它被数据块上的多个作业使用。
当我启动作业执行时,没有使用与作业对应的 jar 的更新,在集群上,我看到它使用了旧版本的 jar。
澄清一下,我通过 API 2.0 在数据块中发布了 jar。
我的问题是为什么当我开始执行我的作业时,集群上的执行总是使用旧版本。
谢谢你的帮助
只有当集群终止时,旧的jar 才会从集群中移除。如果您有一个永不终止的共享集群,那么它就不会发生。这不是 Databricks 的限制,而是 Java 无法卸载已经在使用中的 类(或者很难可靠地实施)。
在大多数情况下,确实不建议使用共享集群,原因如下:
- 它的成本要高得多 (~4x)
- 从性能的角度来看,任务相互影响
- 很大概率存在依赖冲突+无法在不影响其他任务的情况下更新库
- 在驱动程序节点上收集了一种“垃圾”
- ...
如果您使用共享集群来获得更快的执行速度,我建议查看 Instance Pools,尤其是将 Databricks Runtime 预加载到实例池中的节点上。
我有一个共享集群,它被数据块上的多个作业使用。 当我启动作业执行时,没有使用与作业对应的 jar 的更新,在集群上,我看到它使用了旧版本的 jar。
澄清一下,我通过 API 2.0 在数据块中发布了 jar。
我的问题是为什么当我开始执行我的作业时,集群上的执行总是使用旧版本。 谢谢你的帮助
只有当集群终止时,旧的jar 才会从集群中移除。如果您有一个永不终止的共享集群,那么它就不会发生。这不是 Databricks 的限制,而是 Java 无法卸载已经在使用中的 类(或者很难可靠地实施)。
在大多数情况下,确实不建议使用共享集群,原因如下:
- 它的成本要高得多 (~4x)
- 从性能的角度来看,任务相互影响
- 很大概率存在依赖冲突+无法在不影响其他任务的情况下更新库
- 在驱动程序节点上收集了一种“垃圾”
- ...
如果您使用共享集群来获得更快的执行速度,我建议查看 Instance Pools,尤其是将 Databricks Runtime 预加载到实例池中的节点上。