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

War*_*ame 5 python pool cluster-computing azure databricks

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

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

其中一些作业的运行时间要短得多(<10 秒),其中 90 秒的安装时间似乎更重要。我们一直在考虑使用热集群(通用计算)来完成这些较短的作业。如果可能的话,我们希望避免通用计算的额外成本。

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

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

Ale*_*Ott 3

您无法将库直接安装到池中的节点中,因为实际代码是在与 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,它稍微复杂一些,但也是可行的