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

Posted

技术标签:

【中文标题】您可以在 Databricks 池节点上预安装库吗?【英文标题】:Can you pre-install libraries on Databricks Pool nodes? 【发布时间】:2022-01-10 17:37:51 【问题描述】:

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

其中一些作业运行时间很长,因此我们想使用 Jobs 计算机集群for the lower cost in DBUs.

其中一些作业的运行时间要短得多(

阅读 Databricks 文档表明 Idle instances in the Pool are reserved for us but not costing us DBUs.有没有办法让我们在 Idle 实例上预先安装所需的库,以便在完成作业时我们能够立即开始处理它?

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

【问题讨论】:

请帮助我了解您的用例小模式。 1.为什么你试图在节点级别而不是集群级别安装包? 2. 为什么我们不能使用笔记本级别的包。参考:docs.databricks.com/libraries/notebooks-python-libraries.html 感谢您的回复。 1. 在集群级别安装它们也很好。我只想在尝试在节点上运行作业之前安装这些库,所以只要这样做我对任何一种方法都很满意。我不认为在这里应用集群级别,因为这些是来自池的作业的节点。 2. 我认为这不适用于笔记本级别的软件包,因为这些是工作,而不是笔记本。似乎这种安装发生在代码运行时而不是节点初始化时。 【参考方案1】:

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

创建您的own Docker image 并预先安装所有必要的库,并创建pre-load Databricks Runtime version 和您的Docker 映像-这部分无法通过UI 完成,因此您需要使用REST API(参见preloaded_docker_images 的描述属性)、databrick-cli 或 Databricks Terraform provider。自定义 Docker 镜像的主要缺点是某些功能无法直接使用,例如 Repos、Web 终端等中的任意文件(不记得完整列表) 将所有必要的库及其依赖项放到 DBFS 上,并通过cluster init script 安装它们。收集二进制依赖项非常重要,而不是仅包含源代码的包,因此在安装时不需要编译它们。这可以做一次: 对于 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,它稍微复杂一些,但也是可行的

【讨论】:

对于这两个选项,您能否为我验证它们是在实例启动(即进入空闲状态)时完成,而不是在作业首次开始在这些实例上运行时完成?我在文档中读过一些关于这些的内容,但找不到任何说法。 初始化脚本和容器的加载发生在节点从空闲状态变为运行状态时。在空闲状态下什么都不会发生。加载 Docker 映像、DBR 到其中、初始化脚本等总是有开销。通过预加载 DBR 和 Docker,您可以缩短这段时间 感谢您的回复亚历克斯。有趣的是,它发生在从 Idle 移动到 Running 时。我原以为 Docker 会在第一次启动实例时运行。你能举一个加载周期改进的例子吗?我正在尝试确定这是否值得开发工作 基本上,当你使用实例池时,集群启动如下: 1. 从池中获取节点; 2.加载Docker镜像; 3.将DBR放入Docker; 4.执行初始化脚本; 5. 启动 Spark 进程。通过预加载 docker 和 DBR,您可以缩短第 2 和第 3 项。通过使用二进制包,您可以缩短第 4 项。真正的改进取决于库的数量等,但您可以衡量它。 我看到对于非常短的任务,一些客户正在使用交互式集群 - 他们为每个 DBU 支付更多费用,但执行速度非常快,因为您不需要初始化任何东西。但是,如果任务使用不同版本的库,可能会出现问题,并且由于其他进程同时运行而可能会出现问题

以上是关于您可以在 Databricks 池节点上预安装库吗?的主要内容,如果未能解决你的问题,请参考以下文章

是否可以通过 azure databricks 连接到无服务器 sql 池?

bs4.FeatureNotFound:找不到具有您请求的功能的树生成器:lxml。您需要安装解析器库吗?

pycharm中python解释器更换版本需要重新安装第三方库吗?

在 Heroku 上预编译资产时如何普遍跳过数据库接触

将 Azure Databricks 增量表迁移到 Azure Synapse SQL 池

安装 GHC 7.8 时可以确保安装分析库吗?