azure-databricks-cluster-usage-management

Overview

  • 定义计算资源(集群、作业和池),并确定用于不同工作负载的资源。

  • 描述几个用例的集群资源调配策略,以最大限度地提高可用性和成本效益。

  • 描述集群治理的最佳实践,包括集群策略。

  • 描述Azure Databricks的容量限制。

  • 描述如何管理成本和执行按存储容量使用计费分析。

计算资源/Computation Resources

cluster

集群是一组虚拟机,您可以在其上运行数据工程、数据科学和数据分析工作负载,如生产ETL管道、流式分析、特殊分析和机器学习。集群允许您将一组计算机(工作节点)视为由驱动程序节点编排的单个计算机。

image-20221229113520127

cluster manager

您可以使用Clusters UI、CLI或REST API创建集群。控制平面(在Microsoft管理的Azure订阅中)中的群集管理器将为您的群集请求虚拟机,并在数据平面(在客户管理的Azure预订中)中启动它们。创建集群后,可以通过连接笔记本和执行命令来使用它运行交互式工作负载。

image-20221229113656856

job

除了交互式工作负载之外,您还可以通过作业在集群上运行自动化工作负载。作业是立即或按计划运行笔记本或JAR的一种方式。您可以使用作业UI、CLI或API管理和监视作业。

image-20221229113937803

Cluster Types

Azure Databricks区分了通用集群和作业集群。当您使用Clusters UI、CLI或API创建集群时,您将创建一个通用集群,该集群可用于与笔记本交互运行工作负载。创建作业时,可以选择使用现有的通用集群,或创建新的作业集群。作业集群是短暂的;它们是为作业创建的,并在完成时终止,这与通用集群不同,通用集群是持久的,可以手动重新启动。 多个用户之间可以共享通用集群,以进行协作交互分析。作业集群允许您运行快速、健壮的自动化作业,并进行隔离和定时运行。随着计算成本显著降低,作业集群非常适合生产和重复工作负载。通用集群非常适合分析和特殊工作。

image-20221229114309698

Pool

您可以选择配置群集以从池中提取虚拟机。池是一组空闲的、随时可用的实例,允许您减少集群启动和自动缩放时间。当连接到池的集群需要实例时,它首先尝试分配池的一个空闲实例。如果池没有空闲实例,则通过从实例提供程序分配新实例来扩展池,以适应集群的请求。当一个集群释放一个实例时,它将返回到池中,并可供另一个集群使用。只有连接到池的集群才能使用该池的空闲实例。 您可以使用池UI、CLI和API管理池。

image-20221229200234452

将集群连接到池可以节省实例获取时间,这对于有许多库和依赖项安装的集群来说可能是启动就要相当长的时间。如果没有池,一些短时间的作业可能会比运行实际工作负载浪费更多的时间,因为大部分都消耗在获取、启动集群这个过程。 尽管Azure Databricks不向闲置实例的DBU收费,但实例的云提供商成本仍然适用。可以在池中配置限制以管理成本。我们将在下一节中进一步讨论。

image-20221229200549258

集群配置/Cluster Configurations

Custer mode

配置群集时,可以从三种群集模式中进行选择。

首先是标准集群,建议单个用户使用。 第二个是高并发集群,它是一个托管云资源,可以在多个用户之间共享,具有公平的调度和隔离的笔记本环境。高并发集群的主要好处是,它们提供了Spark本机细粒度共享,以实现最大的资源利用率和最小的查询延迟。为多个用户配置一个集群也比为每个用户配置集群更容易。 单节点集群没有工作线程,并在驱动程序节点上运行Spark作业。相比之下,标准模式集群除了驱动程序节点之外,还需要至少一个Spark工作节点来执行Spark作业。

image-20221229201039427

comparison

下面是三种集群模式的详细比较。建议为单个用户使用标准和单节点集群,而高并发集群是多个用户的理想选择。高并发集群的性能和安全性是通过在单独的进程中运行用户代码来实现的。这不是用于Scala。因此,高并发集群只适用于SQL、Python和R,标准和单节点集群除了Scala之外还可以运行这些语言。 只有高并发集群支持Python和SQL表访问控制。这通常与凭据传递一起使用,它允许您使用用于登录Azure Databricks的身份从Azure Databrick群集自动向blob存储或ADLS进行身份验证。在标准和单节点群集上,凭据传递限制单个用户使用。在高并发集群上,凭证传递仅允许您运行Python和SQL命令。正如我们前面提到的,高并发集群为并发用户的性能和安全性提供了进程隔离。

image-20221229201440249

use cases

下面是每个集群模式的一些用例。标准集群通常用于生产批处理或流式ETL或ML作业,其中高并发集群用于交互式分析或商业智能。根据工作负载的不同,两者都可以用于特殊开发。标准集群的用户通常是数据工程师和数据科学家,而高并发集群的用户则通常是数据分析师。管理和财务部门的用户也可以使用高并发集群来快速洞察。数据分析师或数据科学家可以使用单节点集群进行轻量级探索性数据分析或单节点机器学习工作负载。

image-20221229201651060

Guardrails for High Concurrency Clusters

有几个过程可以帮助集群在许多并发用户中保持其性能。 首先是查询监视器。大型查询可能会非常缓慢,使集群资源饱和,并使其他人难以共享同一个集群。查询监视器是一个过程,它通过检查大型查询的最常见原因并终止超过阈值的查询,防止查询独占集群资源。这对于使用UI创建的所有通用集群都是启用的。应为SQL分析师和数据科学家共享给定集群的特殊分析集群启用查询监视器,管理员需要确保查询彼此“良好”。通常,我们不建议急于取消ETL场景中使用的查询,因为通常没有人在循环中纠正错误。我们建议您禁用除临时分析群集之外的所有群集的查询监视器。 另一个有用的过程是任务抢占。Azure Databricks中的Apache Spark调度程序自动抢占任务以强制公平共享。这保证了具有许多并发运行作业的集群上的交互式响应时间。 Spark配置属性可用于根据您的需要调整这些流程。

image-20221229201932374

Cost Control with Pools

我们之前看到,在池中保持空闲VM实例对性能很好,但不是免费的。Azure Databricks不会对集群未使用的闲置实例收取DBU费用,但这些实例的云提供商成本却需要。有几种推荐的方法可以配置您的池,以在满足您的需求的同时最大限度地降低成本。

image-20221229202112993

如果您只在工作时间运行交互式工作负载,请确保池的“Min Idle”实例计数在下班后设置为零。或者,如果您的自动数据管道在夜间运行了几个小时,请在管道启动前几分钟设置“最小空闲”计数,然后将其恢复为零。或者,始终保持“最小空闲”为零,但设置“空闲实例自动终止”超过你需要运行的作业时间,以满足您的需要。池中运行的第一个作业将缓慢启动,但在超时时间段内运行的后续作业将快速启动。作业完成后,池中的所有实例都将在空闲超时期后终止,从而避免了云提供商的成本。此外,还可以通过设置池的最大容量来预算VM资源。这限制了所有空闲实例和连接到池的集群使用的实例的总和。

Databricks Runtime

Databricks运行时是在集群上运行的一组核心组件。所有Databricks运行时都包含ApacheSpark,并添加了可提高可用性、性能和安全性的组件和更新。建议您查看最新的Databricks Runtime发布功能,并将集群迁移到最新版本,其中通常包括性能和稳定性修复以及新功能。

image-20221229202533328

Types

当您创建或编辑集群时,Databricks在DatabricksRuntime Version下拉列表中提供了几种类型的运行时和这些运行时类型的几种版本。 Databricks Runtime包括Apache Spark,但也添加了大量组件和更新,大大提高了大数据分析的可用性、性能和安全性。DatabricksRuntime ML是Databricks Runtime的变体,它添加了多个流行的机器学习库,包括TensorFlow、Keras、PyTorch和XGBoost。Databricks Runtime for Genomics是为处理基因组和生物医学数据而优化的DatabricksRuntime的变体。DatabricksLight为不需要DatabricksRuntime提供的高级性能、可靠性或自动缩放优势的作业提供了运行时选项。

image-20221229202644075

Autoscaling

自动添加和删除工作节点,以响应不断变化的工作负载,优化资源使用。启用自动缩放后,Databricks会自动选择运行Spark作业所需的适当数量的工作节点。自动缩放使实现高集群利用率变得更容易,因为您无需担心集群的精确配置以匹配工作负载。这可以提供两个优点:

(1)与运行恒定大小且配置不足的集群相比,工作负载运行速度更快。

(2)与静态大小的集群相比,您可以降低总体成本。 启用自动缩放时,可以指定集群中节点的最小和最大数量。为工作节点设置这个范围需要一些实验。临时使用或业务分析通常会有很大的差异。对于生产批处理作业,可以关闭自动缩放或在上限上添加buffer。不要对流式工作负载使用自动缩放。结构化流上自动缩放的默认行为是集群将始终缩放到最大节点数。建议的最佳做法是禁用结构化流工作负载的自动缩放,并将其作为Databricks作业在新作业集群上运行,并进行无限次重试。

image-20221229203048460

Auto Termination

在创建群集期间,您可以指定一个非活动时间段(以分钟为单位),在该时间段之后,您希望群集终止。如果当前时间与集群上上次运行的命令之间的差异超过指定的非活动时间,Databricks将自动终止该集群。建议为ad-hoc集群启用自动终止,以防止空闲集群在夜间或周末运行。 自动终止设置的默认值取决于您选择创建标准集群还是高并发集群。标准集群配置为在120分钟后自动终止。高并发集群配置为不自动终止。

image-20221229203155961

Instance Types

可用的机器类型列表可能令人望而生畏。为了简化这一点,Azure Databricks自动将机器类型组织到适当的工作负载类型组中,并为每个工作负载类型推送最常用的机器类型。您还可以使用Pricing Calculator选择特定的工作负载类型和节点数量,以查看估计的DBU成本。 对于内存密集型应用程序,建议使用内存优化的实例类型。例如,如果机器学习工作负载在内存中缓存了大量数据。 计算优化的实例类型对结构化流式应用程序很有帮助,因为您需要确保在一天的高峰时间处理速率高于输入速率。这些也可用于分布式分析和数据科学应用。对于需要更高磁盘吞吐量和IO的用例,建议使用存储优化的实例类型。对于企业级应用程序、关系数据库和具有内存缓存的分析,建议使用通用实例类型。

image-20221229203424178

Spot VMs (Private Preview)

VM实例有两层:按需和现货。对于按需实例,您可以按秒支付计算容量,无需长期承诺。目前在私人预览中,现货实例允许您使用备用Azure VM计算能力,并选择您愿意支付的最高价格。基于Azure计算能力的供需情况,实时改变现货价格。如果当前现货市场价格高于最高现货价格,则终止现货实例。由于与按需定价相比,现货实例通常以折扣价提供,因此在相同的预算下,您可以显著降低运行应用程序的成本,增加应用程序的计算能力,并提高吞吐量。 集群可以使用按需和现货实例的组合来创建(具有自定义现货价格),允许您根据您的用例定制集群。我们建议启动集群,使Spark驱动程序位于按需实例上,这样即使在丢失点实例节点后也可以保存集群的状态。如果您选择使用所有现货实例(包括驱动程序),当您由于现货市场的变化而丢失驱动程序实例时,任何缓存的数据或表都将被删除。

image-20221229204252682

根据SLA,尽可能利用现货定价。对于非任务关键型作业,为worker使用现场虚拟机,为驱动程序使用按需虚拟机。对于具有严格SLA的工作流,请使用回退到按需的现货实例。如果您运行的是混合集群(即按需和现货实例的混合),并且如果现货实例获取失败或您丢失现货实例,Azure Databricks将恢复使用按需实例,并为您提供所需的容量,则此Spot将恢复为按需功能。如果没有此选项,您将失去群集的点实例提供的容量,从而导致工作负载延迟或失败。对于生产作业,请使用所有按需实例。

Cluster Sizing Starting Points

Rules of Thumb

以下是集群规模调整的几个起点。为了减少网络混乱,通常首选较少的大实例而不是较多的小实例。这主要适用于批处理ETL作业;对于流,可以根据转换的复杂性从较小的实例开始。这不是板上钉钉的——相反的做法在很多情况下都是有意义的,所以尺寸很重要。您可以根据最初的任务数量调整大小,然后再进行调整。使用一个小集群运行该作业,以了解任务的数量,并使用每个核心2-3x个任务进行基本大小调整。根据工作量进行选择。

image-20221229204640409

Workloads requiring caching

如果工作负载需要缓存,请查看Spark UI中的存储选项卡,以查看是否缓存了整个训练数据集。如果它被完全缓存并有空余空间,则可以使用更少的实例。如果它几乎完全缓存,则可以增加集群大小。如果它甚至不接近缓存,请考虑内存优化的实例。检查persistent是否为MEMORY_ONLY或MEMORY_AND_DISK。SSD溢出到磁盘并不是那么糟糕。如果这还不够,请转到下一节。

image-20221229204829767

ETL and Analytics Workloads

首先,通过Ganglia指标查看CPU使用情况,检查我们是否受到计算限制。唯一加快速度的方法是添加更多的内核。接下来,检查我们是否已绑定到网络。在计算繁重步骤之前,检查是否存在高峰值。使用更大和更少的机器来减少洗牌。使用SSD支持的实例实现更快的远程读取。最后,检查我们是否溢写。检查Spark SQL选项卡是否溢出(常见的溢出是在混洗之前进行预聚合)。使用内存优化实例解决此问题。

image-20221229205320904

Additional Cluster Management Best Practices
  • 定期重新启动长时间运行的集群-某些集群作为一个交互式集群全天候运行。建议定期重新启动这些程序以获取新的修补程序。

  • 将未使用的笔记本从集群中分离-将笔记本连接到集群会消耗每个REPL(每个笔记本使用的语言)的一定内存量。

集群治理/Cluster Governance

集群治理最佳实践

对于集群治理,您可以通过授予用户“可以重新启动”或“可以连接到”权限来锁定集群配置,而不是授予集群创建和管理权限。对于那些希望授予集群创建权限的用户,可以使用集群策略在集群配置中强制执行规则。

image-20221229232233604

群集策略

作为管理员,您可以配置群集策略以限制可用于创建群集的属性或属性值。然后,用户可以从群集配置页面上的策略下拉列表中选择群集策略。您可以配置将群集策略限制为特定用户和组的ACL。 群集策略允许您:

(1)限制用户使用指定的设置创建群集。

(2)通过修复和隐藏一些值来简化用户界面,以使更多用户能够创建他们的集群。

(3)通过限制每个集群的最大成本来控制成本(例如,通过对其值有助于每小时价格的属性设置限制)。 例如,这里有一个策略,允许用户以最小的配置创建一个中型集群。创建时唯一需要的字段是集群名称;其余的是固定的和隐藏的,正如你在右边看到的。左边是该策略的JSON配置-这是管理员将配置的地方,右边是最终用户将看到的内容。 只有管理员用户才能创建、编辑和删除群集策略。管理员用户也可以访问所有策略。

image-20221229232516626

群集策略-好处

集群策略提供了三个好处:

(1)控制成本-例如,防止个人以高worker数量运行不必要的大型集群,强制实施特定配置以节省成本,例如自动终止。

(2)改进治理-例如,强制使用集群标签来跟踪团队或项目的使用情况,控制哪些用户或组能够使用更大的集群,并可能将其与内部审批流程相关联。

(3)将中断降至最低-从第一天起就设置正确的限制,以避免更多用户加入时出现问题。

image-20221229232642901

群集策略-应用程序

下面是一些您可能希望使用策略的示例。对于不同的工作负载,可以使用不同的集群大小。您还可以确保所有用户或业务部门都有一个标准运行时,这在解决问题时非常重要。如果您知道所有用户或组都在使用特定版本的运行时,那么它可以使再现性变得更容易。 您可以拥有经过认证的超级用户,因为某些用户有内部审批流程,可以访问更不受限制的策略。您还可以为作业和交互式工作负载制定不同的策略。当您想要限制用户可以调度作业的集群类型时,这一点就发挥了作用。例如,如果我不希望我的用户能够针对通用或交互式集群调度作业,我可以设置一个策略,只允许使用临时或作业集群。

image-20221229232816847

群集策略-用例

以下是集群策略的两个潜在用例。数据科学策略可能具有可选的自动缩放功能,所需的自动终止时间为120分钟。数据分析策略可能允许用户根据查询要求从预定义的一组“T恤尺寸”中进行选择,以确定集群的大小。它还可以强制自动终止并具有共享池访问权。

image-20221229232922717

容量限制/Capacity Limits

在本课中,我们将确定Databricks中功能的重要容量限制,包括API网关、作业服务、群集管理器和Azure计算/网络限制。 请注意,以下规定的限制不得解释为可用性保证;任何超过这些限制的尝试都可能导致停机,并且在SLA中不会算作“停机”。

API Gateway Limits

所有API调用中每个工作区总计30个API/秒;未使用的容量将缓存最多500个API调用。这个限制是为了防止错误配置的API客户端占用太多资源。达到极限后,将返回429错误代码。可以在等待至少一秒钟后尝试进一步的呼叫。 特定API可能具有较低的单个调用速率。例如,虽然一个工作区可能每秒允许30个API调用,但任何给定的API都可能有10个API/秒的限制(并且您可以同时使用三个这样的API)。

Jobs Service Limits

我们设置了以下限制,以确保在当前容量和架构的情况下始终能够保证工作可用性: 每个工作区1000次并发运行 每个工作区每小时创建5000个工作 当超过这些限制时,用户将收到429个响应代码,需要重试其请求

P.S.好像跟azure CN得文档上有些差异,还是以文档的为准吧:https://learn.microsoft.com/zh-cn/azure/databricks/resources/limits

Cluster Manager Limits

To prevent abuse, CM family of services imposes:

An upsize throttling limit of 100 VMs acquisitions/min per workspace; unused capacity will cache with a maximum of 1000 VM acquisitions. Excess requests will be queued.

An upsize throttling limit of 1800 VMs acquisitions-in-progress per control plane. Excess results will be queued for up to 20 minutes.

Azure Network Resource Provider (NRP) has as of the date of this document a throughput limit of 50 concurrent write operations (i.e., create or delete)

由于删除与相同配额的创建相冲突,因此集群的生存期对我们可以同时启动多少集群和实例起着重要作用,建议的使用模式变得无法估计。此外,由于每个订阅都有限制,因此同一订阅上的任何其他创建/删除(例如其他Databricks工作区、AKS集群等)都将争夺相同的配额。

以下是如何针对不同场景解释这一点的指导: 对於单个大型集群创建,不要超过200个节点。 由于我们在集群创建过程中错开(而不是跨集群),因此不要同时创建40个中等大小的集群(即最多40个节点)。 客户帐户中限制的节点数,按以下顺序排列: 每个地区每个订阅的最大虚拟机数-25k 工作区中的最大VM数-由子网大小确定 最大虚拟机数将由配额限制: VM配额由VM系列提供-配额除以给定实例类型所需的vCPU数量。 PublicIP配额-每个VM一个。

高冲击工作负荷

如果您需要比Azure允许的更快地创建/删除群集,您可以使用实例池来避免某些限制。

Azure计算/网络限制

一些Microsoft CRP/NRP限制。请注意,限制是每个订阅,因此添加更多订阅将增加规模。

成本管理/Cost Management

Azure Databricks Costs

DBU Costs

Azure Databricks按DatabricksUnit(DBU)(每小时处理能力的一个单位)收取使用费。DBU在Databricks集群启动时收取费用(可能有部分DBU成本)。尽管计算实例的Azure成本仍然适用,但闲置池实例不收取DBU费用。 例如,如果您创建了一个具有一个驱动程序节点和3个DS3_v2类型的工作节点的集群,并运行该集群2小时,则可以按如下方式计算DBU:总实例小时数=节点总数× 小时数=(1+3)× 2=8个DBU。总成本包括8个DBU的成本,以及DS3_v2实例的8个实例小时的Azure成本。

image-20221230103402285

Infrastructure Costs

除了DBU成本,还有Azure Databricks基础设施的成本。

  • 为每个工作区创建的DBFS根管理存储的Blob存储成本

  • 群集中用于运行工作负载的实例的Azure VM成本

  • 连接到每个工作节点的磁盘的Azure托管磁盘成本,包括连接到每个VM的30GB实例根磁盘和连接到每个虚拟机中Databricks Runtime容器的150GB数据磁盘

  • 公共IP地址成本,因为群集VM每个都有一个动态公共IP地址,除非客户使用无公共IP功能

  • 从与服务遥测、spark和审计日志相关的出口费用到Databricks存储和事件中心端点的网络带宽成本(如果控制平面不在同一区域)

  • 与提供诊断/审计日志相关的可选存储、事件中心和日志分析成本

image-20221230175245153

Resource Groups

有两个资源组与每个Azure Databricks工作区关联,即用户标识的资源组和自动生成的托管资源组。Azure Databricks工作区部署在用户标识的资源组中。所有基础结构资源都在托管资源组中创建。此资源组的命名约定为:“databricks rg-”+用户指定的资源组+“ws”+随机字符(azure CN的看了没有ws标识,可能是global的?)

image-20221230175528986

Tags

为了监控成本并准确地将Azure Databricks的使用情况归因于组织的业务部门和团队(例如,用于按存储容量使用计费),您可以标记工作区(资源组)、集群和池。这些标签传递到您可以在Azure门户中访问的详细成本分析报告。 这些标记在创建工作区、集群或池时应用,并由相关基础设施资源继承。

image-20221230175815710

Cost Analysis

为了监控成本并准确地将Azure Databricks的使用情况归因于组织的业务部门和团队(例如,用于按存储容量使用计费),您可以标记工作区(资源组)、集群和池。这些标签传递到您可以在Azure门户中访问的详细成本分析报告。 这些标记在创建工作区、集群或池时应用,并由相关基础设施资源继承。

image-20221230175910754

Cost Report

转到Azure门户中的成本管理+计费以查看成本分析。

image-20221230175943820

Cost Export

您可以在SKU级别按DBU获取细分,以在数据基础上构建自定义报告解决方案。虽然有一个选项可以与成本分析相反,但Azure通过CSV成本导出和本地计费API(仅适用于企业协议客户)提供了专门的方法。

image-20221230180053690

Pre Purchase Plan (P3)

Azure Databricks预购计划(P3)允许组织预购DBU,并提供额外好处,包括批量折扣、服务积分、培训积分、Slack支持和SCP考虑。您可以购买与资源组、订阅或企业协议相关的P3。在企业协议范围内购买是最佳做法。这使组织能够在订阅中共享Azure Databricks消费,以换取更高的折扣。使用按存储容量使用计费模型,组织可以随后对每个订阅的确切使用情况进行收费。

image-20221230180253303

Cost Report for P3

由于P3是预付款,实际成本报告将显示$0。要获取P3提取的信息,请在成本分析中选择摊销成本。

image-20221230180353891

Chargebacks

为了进行有效的按存储容量使用计费分析,请为不同的部门/团队创建单独的工作区,并为部门/团队中的每个项目/计划创建单独的集群。为每个工作区和项目关联适当的工作区和集群标签,然后利用策略确保标签的一致应用(工作区标签的Azure策略,集群标签的Databricks集群策略)。这将允许您按工作区和集群标签监视和报告按存储容量使用计费。

image-20221230180515882

Budget & Cost Monitoring

您可以通过Azure成本中心中的工作区和集群标记定义预算,以及为预算阈值创建操作组。例如,您可以配置操作以在达到预算的80%时发送电子邮件,或在达到预算100%时调用Azure功能终止群集。

image-20221230180647157

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章