计算配置最佳做法

创建和配置计算时,可以使用 Azure Databricks 提供的许多选项,以最低的成本获得最佳性能。 但这种灵活性在你尝试确定工作负载的最佳配置时可能会带来挑战。 创建新计算或配置现有计算时,请仔细考虑用户如何使用计算会有助于指导配置选项。 确定配置选项时要考虑的一些事项包括:

  • 什么类型的用户将使用计算? 与数据工程师或数据分析师相比,数据科学家可能运行具有不同要求的不同作业类型。
  • 用户会在计算上运行哪些类型的工作负载? 例如,批量提取、转换和加载 (ETL) 作业的要求可能与分析工作负载不同。
  • 你需要满足哪一级别的服务级别协议 (SLA)?
  • 你有哪些预算限制?

本文根据这些注意事项针对不同方案提供计算配置建议。 本文还将讨论 Azure Databricks 计算的特定功能以及关于这些功能的注意事项。

配置决策需要在成本和性能之间进行权衡。 计算的主要成本包括计算使用的 Databricks 单位 (DBU),以及运行计算所需的基础资源成本。 次要成本可能不太明显,例如未满足 SLA 所造成的业务成本、员工效率的下降或由于控制不当而可能造成的资源浪费。

计算功能

在讨论更详细的计算配置方案之前,请务必了解 Azure Databricks 计算的某些功能,以及如何最好地使用这些功能。

通用计算和作业计算

创建计算时,请选择计算类型:通用计算或作业计算。 通用计算可以由多个用户共享,并且最适合用于执行即席分析、数据浏览或开发。 实现处理并准备好操作代码后,请转为在作业计算上运行它。 作业结束时,作业计算将终止,从而减少资源使用和成本。

单节点和多节点计算

在“创建计算”UI 的顶部,可以选择计算是“多节点”还是“单节点”

单节点计算适用于使用少量数据或非分布式工作负载(例如单节点机器学习库)的作业。 多节点计算应用于具有分布式工作负载的大型作业。

按需实例

为了节省成本,Azure Databricks 支持使用按需实例创建计算。

自动缩放

注意

计算自动缩放在缩减结构化流式处理工作负载的群集大小方面存在限制。 Databricks 建议将增量实时表与增强式自动缩放用于流式处理工作负载。 请参阅使用增强型自动缩放来优化增量实时表管道的群集利用率

自动缩放允许计算根据工作负载自动调整大小。 从成本和性能的角度来看,自动缩放可使许多用例和方案受益,但就何时以及如何使用自动缩放可能具有挑战性。 以下是确定是否使用自动缩放以及如何充分利用此功能的一些注意事项:

  • 与固定大小的计算相比,自动缩放通常可降低成本。
  • 与预配过低的固定大小的计算相比,自动缩放工作负载的运行速度更快。
  • 某些工作负载与自动缩放计算不兼容,包括 spark-submit 作业和某些 Python 包。
  • 对于单一用户通用计算,当最小工作器数量设置得过低时,用户可能会发现自动缩放会减慢他们的开发或分析速度。 这是因为它们运行的​​命令或查询通常相隔几分钟,在此期间计算处于空闲状态并且可能会纵向缩减以节省成本。 执行下一个命令时,计算管理器将尝试纵向扩展,需要花费几分钟时间从云提供程序检索实例。 在此期间,作业可能会在资源不足的情况下运行,从而缩短检索结果的时间。 虽然增加工作器的最小数量有所帮助,但同时也会增加成本。 这是需要平衡成本和性能的另一个示例。
  • 如果正在使用磁盘缓存,请务必记住,一旦节点终止,节点上的所有缓存数据都将丢失。 如果保留缓存数据对工作负载很重要,请考虑使用固定大小的计算。
  • 如果有运行 ETL 工作负载的作业计算,并且知道作业不太可能发生变化,则优化时有时可以适当调整计算的大小。 但如果数据大小增加,可利用自动缩放灵活进行处理。 另外,值得注意的是,如果计算未充分利用或正在等待来自其他进程的结果,则优化后的自动缩放可减少长时间运行作业的支出。 不过,当计算尝试适当地进行纵向扩展时,作业可能会出现轻微延迟。 如果作业有严格的 SLA,固定大小的计算可能是更好的选择,或者考虑使用 Azure Databricks 来减少计算启动时间。

Azure Databricks 还支持自动缩放本地存储。 自动缩放本地存储时,Azure Databricks 会监视计算的 Spark 工作器上提供的可用磁盘空间量。 如果工作器开始出现磁盘空间不足的情况,则 Azure Databricks 会在该工作器的磁盘空间耗尽之前自动将新的托管卷附加到该工作器。

池配置参考通过维护一组随时可用的实例来缩短计算启动和纵向扩展的时间。 Databricks 建议利用池来改善处理时间,同时最大限度地降低成本。

Databricks Runtime 版本

对于通用计算,Databricks 建议使用最新 Databricks Runtime 版本。 使用最新版本可确保代码和预加载包之间的最新优化和兼容性。

对于运行操作工作负载的作业计算,请考虑使用长期支持 (LTS) Databricks Runtime 版本。 使用 LTS 版本可确保不会遇到兼容性问题,并且可以在升级之前全面测试工作负载。 如果你有围绕机器学习的高级用例,可以考虑使用专用 Databricks Runtime 版本。

计算策略

Azure Databricks 计算策略允许管理员强制控制计算的创建和配置。 Databricks 建议使用计算策略来帮助应用本指南中讨论的建议。

自动终止

许多用户在使用完计算后,不会想到终止计算。 幸运的是,计算会在设定的时间段(默认为 120 分钟)后自动终止。

创建计算策略时,管理员可以更改此默认设置。 减少默认时间设置可以减少计算处于空闲状态的时间,从而降低成本。 请务必记住,终止计算时,所有状态都将丢失,包括所有变量、临时表、缓存、函数、对象等。 计算重新启动时,所有这些状态都需要还原。 如果开发人员出去休息 30 分钟,那么花同样多的时间让笔记本恢复到之前的状态会很浪费时间。

重要

空闲计算在终止之前的不活动期间会继续累积 DBU 和云实例费用。

垃圾回收

尽管可能没有本文讨论的其他注意事项那么明显,但请注意,垃圾回收可以帮助优化计算上的作业性能。 提供大量 RAM 有助于提高作业效率,但也可能导致在垃圾回收过程中出现延迟。

若要最大程度地减少长时间的垃圾回收清理的影响,请避免在部署计算时为每个实例配置大量的 RAM。 为执行器分配更多的 RAM 将导致更长的垃圾回收时间。 相反,如果作业需要更多内存,则可配置 RAM 大小更小的实例,并部署更多实例。 但是,在某些情况下,建议使用更少的节点和更多的 RAM,例如,需要大量随机操作的工作负载,如调整计算大小的注意事项中所述。

计算访问控制

你可以配置两种类型的计算权限:

  • “不受限制地创建群集”权限控制用户创建计算的能力
  • 计算级别的权限可控制使用和修改特定计算的能力。

若要了解有关配置计算权限的详细信息,请参阅计算访问控制

只要具有计算创建权限或有权访问计算策略,就可创建计算,这使你可以在策略规范内创建任何计算。 计算创建者即是所有者并且拥有“可管理”权限,他们能够在计算的数据访问权限的约束下与任何其他用户共享计算。

在确定常见方案的计算配置时,了解计算权限和计算策略非常重要。

计算标记

可使用计算标记轻松地监视组织中不同组所使用的云资源的成本。 你可以在创建计算时将标记指定为键值字符串,Azure Databricks 会将这些标记应用于云资源。 请参阅通过策略进行标记实施,了解有关标记实施的详细信息。

调整计算大小时的注意事项

Azure Databricks 每个工作器节点运行一个执行程序。 因此,“执行程序”和“工作器”这两个术语可在 Azure Databricks 体系结构的上下文中互换使用。 人们通常将计算大小与工作器数量相关联,但需要考虑其他一些重要因素:

  • 执行程序的内核总数(计算):所有执行程序的内核总数。 这决定了计算的最大并行度。
  • 执行程序的总内存量:所有执行程序的 RAM 总量。 这决定了在将数据溢写到磁盘之前,内存中可以存储的数据量。
  • 执行程序本地存储:本地磁盘存储的类型和数量。 本地磁盘主要用于在随机操作和缓存期间发生溢写的情况。

其他注意事项包括工作器实例类型和大小,这也会影响上述因素。 调整计算大小时,请考虑以下事项:

  • 工作负载将消耗多少数据?
  • 工作负载的计算复杂性如何?
  • 从何处读取数据?
  • 数据在外部存储中是如何分区的?
  • 需要多少并行度?

回答这些问题有助于根据工作负载确定最佳计算配置。 对于仅使用窄依赖(每个输入分区仅贡献一个输出分区的转换)的简单 ETL 样式工作负载,请专注于计算优化配置。 如果预计会进行大量随机操作,则内存量以及考虑到数据溢写的存储量很重要。 在大量随机操作工作负载期间,在计算机之间传输数据时,减少大型实例数可以减少网络 I/O。

工作器数量与工作器实例类型的大小之间存在平衡。 具有两个工作器(每个工作器具有 40 个内核和 100 GB RAM)的计算的计算和内存与具有 10 个内核和 25 GB RAM 的 8 个工作器计算相同。

如果想要多次重新读取相同的数据,则工作负载可能会受益于缓存。 请考虑使用磁盘缓存的存储优化配置。

调整计算大小的示例

以下示例显示特定类型的工作负载的计算建议。 这些示例还包括要避免的配置,以及这些配置不适用于工作负载类型的原因。

数据分析

数据分析师通常执行需要来自多个分区的数据的处理,从而导致许多随机操作。 节点数较少的计算可以减少执行这些随机操作所需的网络和磁盘 I/O。 下图中的计算 A 可能是最佳选择,尤其是对于支持单个分析师的计算。

群集 D 提供的性能可能最差,因为内存和存储较少的大量节点将需要更多随机数据才能完成处理。

数据分析计算大小调整

分析工作负载可能需要重复读取相同的数据,因此推荐的工作器类型在启用磁盘缓存后进行了存储优化。

建议用于分析工作负载的其他功能包括:

  • 启用自动终止,确保计算在处于非活动状态一段时间后终止。
  • 请考虑根据分析师的典型工作负载启用自动缩放。
  • 请考虑使用池,这样可以将计算限制为预先批准的实例类型,并确保一致的计算配置。

可能没有用的功能:

  • 存储自动缩放,因为此用户可能不会生成大量数据。
  • 共享计算,因为此计算适用于单个用户。

基本批处理 ETL

不需要进行太多转换(例如联接或聚合)的简单批处理 ETL 作业通常会受益于经过计算优化的计算。 对于这些类型的工作负载,下图中的任一计算都可能是可接受的。

基本批处理 ETL 计算大小调整

建议使用计算优化工作器类型;它们成本会更便宜,并且这些工作负载可能不需要大量内存或存储。

对于支持简单 ETL 作业的计算,可能适合使用池,因为它可以减少计算启动时间以及运行作业管道时的总运行时。 但是,由于这些类型的工作负载通常作为计划作业运行,而计算只有运行足够长的时间才能完成作业,因此使用池可能不是你的最佳选项。

以下功能可能没有用:

  • 磁盘缓存,因为不需要重新读取数据。
  • 可能不需要自动终止,因为这些可能是计划的作业。
  • 不建议使用自动缩放,因为应为用例预配置计算和存储。
  • 共享计算适用于多用户,对运行单个作业的计算没有好处。

复杂批处理 ETL

更复杂的 ETL 作业(例如,需要跨多个表进行联合和联接的处理)可能在可以最小化随机数据量时性能最佳。 由于减少计算中的工作器数量有助于最小化随机操作,因此,应考虑下图中较小的计算(如群集 A)而不是较大的计算(如群集 D)。

复杂的 ETL 计算大小调整

复杂的转换可能是计算密集型的,因此对于一些达到最佳内核数的工作负载,可能需要向计算添加额外的节点。

与简单的 ETL 作业一样,推荐使用计算优化的工作器类型;它们更便宜,并且这些工作负载可能不需要大量内存或存储。 此外,与简单的 ETL 作业一样,要考虑的主要计算功能是池,以减少计算启动时间和运行作业管道时的总运行时。

以下功能可能没有用:

  • 磁盘缓存,因为不需要重新读取数据。
  • 可能不需要自动终止,因为这些可能是计划的作业。
  • 不建议使用自动缩放,因为应为用例预配置计算和存储。
  • 共享计算适用于多用户,对运行单个作业的计算没有好处。

训练机器学习模型

由于训练机器学习模型的初始迭代通常是实验性的,因此较小的计算(如群集 A)是一个不错的选择。 较小的计算还可降低随机操作的影响。

如果担心稳定性,或者针对更高级的阶段,较大的计算(如群集 B 或 C)可能是一个不错的选择。

不建议使用群集 D 等大型计算,因为节点之间的数据混用开销很大。

机器学习计算大小调整

推荐的工作器类型是启用了磁盘缓存的存储优化,以说明对相同数据的重复读取并启用训练数据的缓存。 如果存储优化节点提供的计算和存储选项不足,请考虑使用 GPU 优化节点。 一个缺点可能在于这些节点缺乏磁盘缓存支持。

建议用于机器学习工作负载的其他功能包括:

  • 启用自动终止,确保计算在处于非活动状态一段时间后终止。
  • 使用池,这样可以将计算限制为预先批准的实例类型,并确保一致的计算配置。

可能没有用的功能:

  • 自动缩放,因为在计算纵向缩减时删除节点,缓存数据可能会丢失。 此外,典型的机器学习作业通常会消耗所有可用的节点,在这种情况下,自动缩放不会带来任何好处。
  • 存储自动缩放,因为此用户可能不会生成大量数据。
  • 共享计算,因为此计算适用于单个用户。

常见方案

以下部分提供有关为常见计算使用模式配置计算的其他建议:

  • 运行数据分析和即席处理的多个用户。
  • 机器学习等专用用例。
  • 支持计划的批处理作业。

多用户计算

方案

你需要为多个用户提供数据访问权限,以运行数据分析和即席查询。 计算使用情况可能会随着时间的推移而波动,并且大多数作业不会消耗大量资源。 用户主要要求对数据进行只读访问,并想要通过简单的用户界面执行分析或创建仪表板。

建议为计算预配采用一种混合方法,涉及计算中的节点预配和自动缩放。 此方法包括定义计算的按需实例数,并在最小和最大实例数量之间启用自动缩放。

多用户方案

默认情况下,此计算始终可用,并且由组内用户共享。 启用自动缩放可以让计算根据负载进行纵向扩展和纵向缩减。

用户没有启动/停止计算的访问权限,但初始按需实例可立即响应用户查询。

Azure Databricks 具有其他功能,可进一步改进多租户用例:

此方法通过以下方式降低总体成本:

  • 使用共享计算模型。

  • 使用自动缩放来避免为未充分利用的计算付费。

专用工作负载

方案

你需要为组织内的专用用例或团队(例如,运行复杂数据探索和机器学习算法的数据科学家)提供计算。 一个典型的模式是,用户在短时间内需要一个计算来运行分析。

对于此类工作负载,最佳方法是为默认、固定和设置范围创建具有预定义配置的计算策略。 这些设置可能包括实例数、实例类型、现成与按需实例、角色、要安装的库等。 使用计算策略,让具有更高需求的用户快速启动计算,他们可以根据用例的需要进行配置,并强制执行成本和策略合规性。

专用工作负载

这种方法为用户提供了更多控制权,同时通过预定义计算配置来保持控制成本的能力。 这也让你可以为具有访问不同数据集权限的不同用户组配置计算。

此方法的一个缺点是,用户必须与管理员合作才能对计算(例如配置、已安装的库等)进行任何更改。

批处理工作负载

方案

你需要为计划的批处理作业(例如执行数据准备的生产 ETL 作业)提供计算。 建议的最佳做法是针对每个作业运行启动一个新计算。 在新计算上运行每个作业有助于避免由运行在共享计算上的其他工作负载导致的故障和未达到的 SLA。 根据作业的关键级别,可以使用所有按需实例来满足 SLA,或在现成实例和按需实例之间保持平衡,以节省成本。

计划的批处理工作负载