可以在Databricks池节点上预安装库吗?

问题描述 投票:0回答:2

我们有许多 Python Databricks 作业,它们都使用相同的底层 Wheel 包来安装其依赖项。即使节点已在池中闲置,安装此 Wheel 软件包仍需要 90 秒。

其中一些作业运行时间非常长,因此我们希望使用作业计算机集群以降低 DBU 的成本。

其中一些工作的运行时间要短得多(<10 seconds) where the 90 second install time seems more significant. We have been considering using a hot cluster (All-Purpose Compute) for these shorter jobs. We would like to avoid the extra cost of the All-Purpose Compute if possible.

阅读 Databricks 文档表明,池中的空闲实例是为我们保留的,但不会消耗我们的 DBU 。有没有办法让我们在空闲实例上预安装所需的库,以便当作业完成时我们能够立即开始处理它?

是否有替代方法可以满足类似的用例?

python azure cluster-computing databricks pool
2个回答
1
投票

您无法将库直接安装到池中的节点中,因为实际代码是在Databricks Runtime对应的Docker容器中执行的。有多种方法可以加快库的安装速度:

  • 创建您的自己的 Docker 映像,并预安装所有必需的库,并预加载 Databricks Runtime 版本和您的 Docker 映像 - 这部分无法通过 UI 完成,因此您需要使用 REST API(请参阅
    preloaded_docker_images
    属性的描述)、databrick-cliDatabricks Terraform 提供程序。自定义 Docker 镜像的主要缺点是某些功能无法开箱即用,例如 Repos 中的任意文件、Web 终端等(不记得完整列表)
  • 将所有必需的库及其依赖项放入 DBFS 并通过 集群初始化脚本 安装它们。收集二进制依赖项,而不是仅包含源代码的包,这一点非常重要,因此在安装时不需要编译它们。这可以完成一次:
    • 对于 Python,这可以通过
      pip download --prefer-binary lib1 lib2 ...
    • 来完成
    • 对于 Java/Scala,您可以使用
      mvn dependency:get -Dartifact=<maven_coordinates>
      ,它将下载依赖项到
      ~/.m2/repository
      文件夹,您可以从该文件夹将 jar 复制到 DBFS 并在 init 脚本中使用
      cp /dbfs/.../jars/* /databricks/jars/
      命令
    • 对于R来说,稍微复杂一些,但也是可行的

0
投票

除了 Alex Ott 的解决方案之外,如果您使用基于 Terraform 的解决方案,您还可以添加一个requirements.txt 文件,您需要在其中添加所有必需的 python 库。如果集群中需要安装任何 Maven/Java 库,您可以将它们添加为 Terraform 代码中的列表变量。然后使用如下代码

dynamic "library" {
for_each = toset(split("\n", file("./requirements.txt")))

content {
  pypi {
    package = library.value
    repo    = "if_there_is_any_repo"
  }
}

}

© www.soinside.com 2019 - 2024. All rights reserved.