你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

Azure Databricks 的体系结构最佳做法

Azure Databricks 是一个快速、简单、协作的基于 Apache Spark 的分析平台。 它旨在帮助你大规模构建和部署数据工程、机器学习和分析工作负载,为数据团队提供统一的平台,以便高效协作。 在这些 Databricks 用例中,使用 Azure Databricks 时有一些常见注意事项和最佳做法。 本文讨论了这些注意事项,并提供了符合 Well-Architected Framework 支柱原则的架构建议。

假设作为架构师,你已经查看了选择分析数据存储,并选择 Azure Databricks 作为你的工作负荷的分析平台。

技术范围

此评论侧重于 Databricks 功能的相关决策,这些功能托管在 Azure 中:

  • Azure Databricks
  • Apache Spark
  • Delta Lake
  • 统一目录
  • MLflow

Reliability

可靠性支柱的目的是通过 建立足够的复原能力和从故障快速恢复来提供持续的功能。

可靠性设计原则 为各个组件、系统流和整个系统提供高级设计策略。

工作负荷设计清单

根据可靠性设计评审核对清单开始实施您的设计策略。 确定其与业务需求的相关性,同时牢记应用程序的性质及其组件的关键性。 扩展策略以根据需要包含更多方法。

  • 了解服务限制和配额: Azure Databricks 服务限制通过计算群集、工作区容量、存储吞吐量和网络带宽限制,直接影响工作负荷的稳定性。 必须主动将这些配额纳入架构设计,以防止意外的服务中断,包括 1000 节点群集限制、工作区群集最大值限制和区域容量限制,这些限制可能导致高峰需求期间的扩展操作暂停。

  • 通过故障模式分析预测潜在故障: 系统 故障模式分析 可识别潜在的系统故障,并建立相应的缓解策略,以保持分布式计算复原能力。

    常见的故障方案及其经过验证的缓解方法包括:

    Failure 缓解措施
    群集驱动程序节点故障 使用群集自动重启动策略并为 Spark 应用程序配置检查点。 将结构化流与容错状态管理配合使用。
    作业执行失败 使用指数退避实现重试策略。 使用 Databricks 作业编排和错误处理。 配置正确的超时设置。
    数据损坏或不一致 在 Lakeflow 声明性数据管道中使用 Delta Lake 的 ACID 事务、时间旅行功能和数据预期。 实现数据验证检查和监视。
    工作区或区域不可用 实施多区域部署策略。 使用工作区备份和还原程序。 配置跨区域数据复制。

    这些缓解策略利用本机 Azure Databricks 功能,包括自动重启、自动缩放、Delta Lake 一致性保证和 Unity 目录安全功能来实现容错。

  • 设计以支持跨关键层的冗余: 冗余是一个关键策略,必须应用于关键体系结构层,以保持工作负荷连续性。

    例如,使用各种实例类型、利用群集池和实现自动节点替换策略,跨可用性区域分配群集。 同样,可靠网络设计可防范连接故障,这些故障可能会中断控制平面可访问性、数据访问和与依赖项的通信。 使用冗余网络路径、不同的专用终结点配置、DNS 故障转移机制和 VNet 注入可以帮助实现网络复原能力。 即使是元数据复原能力对于在服务中断期间保持合规性和数据可访问性非常重要,因为治理失败可能会停止数据访问并损害合规性要求。

    为了提高可用性,请考虑使用多区域 Azure Databricks 部署来实现地理冗余,防止区域性中断,并确保在扩展服务中断期间保持业务连续性。 多区域设置也是灾难恢复的可行解决方案。

  • 实现缩放策略: 使用自动缩放来处理需求波动,同时保持性能稳定。 计划在高峰需求期间,因添加资源和区域容量限制而可能出现的延迟,并在速度与群集启动延迟的影响之间进行平衡。

  • 采用无服务器计算来提高可靠性: 无服务器计算选项通过将基础结构管理转移到Microsoft,提供自动缩放、内置容错和一致的可用性,从而降低作复杂性并提高可靠性,而无需群集生命周期管理开销。

  • 实现全面的运行状况监视和警报:在所有 Azure Databricks 组件中进行全面监视,可在发生可用性影响之前进行主动问题检测和快速响应,包括工作区运行状况、群集状态、作业执行模式和数据管道性能以及自动升级工作流。

  • 使用 Delta Lake 可靠性功能保护数据: Delta Lake 通过 ACID 事务、自动版本管理、时间穿梭功能和模式强制提供必要的数据保护,以防止损坏并实现数据恢复。

  • 配置作业可靠性和重试机制: 作业可靠性配置通过智能重试策略、超时管理和故障处理机制建立弹性数据处理,这些机制区分暂时性问题和永久性错误。

  • 生成数据管道复原能力和容错能力: 数据管道复原解决了分布式数据处理的关键可靠性挑战,其中故障可以在整个互连的数据系统中级联并中断业务分析工作流。

    高级复原策略利用 Lakeflow 声明性管道、结构化流检查点、自动加载程序已获救的数据功能和 Lakeflow 声明性管道质量约束,在基础结构中断期间提供自动错误处理、数据质量强制和正常降级。

  • 建立备份和灾难恢复过程: 有效的 灾难恢复 需要使恢复时间目标与业务需求保持一致,同时为工作区元数据、笔记本存储库、作业定义、群集配置和集成数据存储系统建立自动化备份过程。

    如果使用次要区域进行恢复,请注意工作区元数据同步、代码存储库复制以及与依赖 Azure 服务的协调集成,以保持跨地理边界的作连续性。

  • 实施可靠性测试和混乱工程: 系统的可靠性测试以验证故障恢复机制能否在真实条件下正常运作,并结合混乱工程原则,在影响生产环境之前识别出复原能力差距。

Recommendations

建议 益处
配置群集 自动缩放 ,最小节点计数为 2,最大节点计数与工作区配额限制一致。 将目标利用率阈值设置为 70-80%,以平衡成本效率与性能余量。 自动缩放可防止群集资源耗尽,同时通过动态节点分配保持成本效益。 适当的限制配置可确保工作负荷保留在服务配额内,防止作业失败超过工作区容量限制。
跨多个 Azure 区域部署 Azure Databricks 工作区,以用于任务关键型工作负荷。 使用 Databricks 资产捆绑包以及 Azure DevOps 或 Azure 数据工厂管道为源代码、作业定义和群集配置设置自动备份,以配置工作区复制。 多区域部署提供地理冗余,用于在区域性中断或灾难期间维护数据处理功能。

自动化工作区复制通过确保跨区域一致的配置,将恢复时间目标从小时缩短到数分钟。 此方法支持业务连续性要求,并在扩展区域服务中断期间最大程度地减少运营影响。
在同一系列中使用不同 VM 大小建立预热实例的 群集池 。 配置池大小,以确保拥有高于典型工作负荷要求的 20-30% 冗余容量。 预热群集池可将群集启动时间从 5-10 分钟缩短到 60 秒以下,从而更快地从节点故障中恢复。 池中的不同 VM 大小调整可确保即使特定实例类型面临容量限制,群集预配也能成功。
通过配置自动表版本控制和保留策略来激活 Delta Lake 时间旅行 功能。 根据恢复要求设置保留期,通常为生产表设置 7-30 天。 时间旅行功能提供时间点数据恢复,而无需外部备份系统或复杂的还原过程。

自动版本控制可防止数据损坏和意外修改,同时维护完整的数据世系以实现合规性和调试目的。 此方法无需单独的备份基础结构,同时确保从数据问题快速恢复。
通过为群集事件、作业执行和数据分析启用 诊断日志 ,将 Azure Databricks 与 Azure Monitor 集成。 为群集运行状况、作业失败率和资源利用率阈值配置自定义指标和警报。 在故障影响生产工作负荷之前,集中监视可以在所有 Azure Databricks 组件中提供统一的可观测性,以便主动检测问题。

自定义警报通过在群集遇到性能下降或作业失败超过可接受阈值时自动通知团队,从而减少平均解决时间。
部署 无服务器 SQL 仓库 用于临时分析和报告需要一致可用性的工作负荷,而无需群集管理开销。 无服务器基础结构消除了群集预配的时间延迟,并提供自带高可用性保证的自动缩放。 Microsoft管理所有基础结构的修补、更新和故障恢复,降低运营复杂性,并确保一致的性能。
配置 Azure Databricks 作业的 重试策略,其指数退避从 30 秒开始,最大重试次数为 3。 为暂时性故障与配置错误设置不同的重试策略,以避免不必要的资源消耗。 智能重试机制会自动从暂时性故障(例如网络超时或临时资源不可用)中恢复,而无需手动干预。

指数退避可防止服务中断期间过载的下游服务,同时区分可恢复的暂时性问题和永久配置问题。 此方法可减少作开销,并通过自动故障恢复提高系统整体复原能力。
为 Azure Databricks 工作区实现 VNet 注入 ,以启用自定义网络路由和专用连接。 配置网络安全组和 Azure 防火墙规则以控制流量流并与现有企业网络基础结构集成。 VNet 注入通过自定义路由选项提供网络级冗余,并消除了对默认 Azure 网络路径的依赖。

专用连接可实现与本地网络和其他 Azure 服务的集成,同时保持安全隔离。 此配置支持多个可用性区域和自定义负载均衡策略,这些策略可增强整体网络可靠性。
激活 Unity Catalog,实现自动元存储备份和跨区域元数据同步。 在单独的存储帐户中配置外部元存储位置,以确保在工作区故障期间保留元数据。 Unity 目录备份可确保治理策略和数据世系信息在工作区灾难中幸存下来,从而保持合规性和运营连续性。 跨区域同步可将元数据恢复时间从小时减少到数分钟,同时在所有环境中保留集中式访问控制策略。
部署 Lakeflow 声明性管道 以用于需要自动质量控制和容错的生产数据管道。 配置管道重启策略和预期处理,以确保数据质量,同时保持处理连续性。 Lakeflow 声明性管道提供声明性管道管理,可自动处理暂时性故障、数据质量冲突和基础结构问题,而无需手动干预。 通过预期实现内置质量控制,防止损坏的数据在下游传播,而自动重试功能可确保在临时资源限制期间流程能够完成。 此托管方法可降低作开销,同时维护数据完整性标准。
使用 Azure REST API 或 Databricks CLI 创建自动化工作区备份过程,以导出源代码、作业和管道配置、群集设置和工作区元数据。 计划对启用了跨区域复制的 Azure 存储帐户进行定期备份。 全面的工作区备份可以在灾难场景中实现完整的环境还原,同时保留所有开发工作和作配置。 自动化过程消除了人为错误,并确保跨区域存储复制的备份一致性,防止区域性中断。 此方法可减少恢复时间目标,并维护数据团队及其分析工作流的业务连续性。
使用高可用性 Azure 存储帐户(具有区域冗余存储,简称 ZRS)来存储检查点位置,实现结构化流式处理。 根据吞吐量要求和故障恢复目标配置 10-60 秒之间的检查点间隔。 检查点提供精确一次的处理保证,并支持自动从集群故障中恢复,而不会丢失数据或重复处理。 ZRS 存储可确保跨可用性区域故障的检查点持久性,并在基础结构中断期间保持流式处理作业连续性。
为长时间运行的工作负荷激活 自动群集重启 策略,并设定适当的重启超时和最大重启尝试次数。 为任务关键型数据处理工作流配置群集终止检测和自动作业重新安排。 自动重启策略可确保在计划内维护事件期间工作负荷连续性和意外群集故障,而无需手动干预。

智能重启逻辑区分可恢复故障和永久性问题,防止无限重启循环,同时维护关键数据处理作的服务可用性。
在同一计算类别中配置具有多个 VM 系列和大小的 实例池 ,以在容量约束期间提供分配灵活性。 不同的实例类型配置可确保即使特定 VM 大小遇到区域容量限制,群集预配也会成功。 池中的混合 VM 系列提供成本优化机会,同时维护适合工作负荷要求的性能特征,从而减少在高峰需求期间预配失败的风险。
通过故意在非生产环境中引入群集故障、网络分区和资源约束来建立混乱的工程实践。 使用 Azure Chaos Studio 自动执行故障注入,以验证恢复过程并确定复原差距。 主动故障测试在发生生产事件之前验证灾难恢复过程和自动恢复功能。

系统混沌工程识别出在正常操作期间可能不明显的管道依赖项、集群配置和监控系统中的薄弱点。 此方法可增强系统复原能力的信心,同时确保恢复过程在实际中断期间按设计的方式工作。

安全性

安全支柱的目的是为工作负荷提供 保密性、完整性和可用性 保证。

安全设计原则通过对 Azure Databricks 的技术设计应用方法,为实现这些目标提供了高级设计策略。

工作负荷设计清单

根据 设计评审清单制定针对安全 的设计策略,并确定漏洞和控制,以增强安全防御能力。

  • 查看安全基线:Azure Databricks 安全基线提供过程指南和资源,用于实现Microsoft云安全基准中指定的安全建议。

  • 集成安全开发生命周期(SLC): 为源代码和 MLflow 模型安全验证实现安全代码扫描,以在开发生命周期早期识别漏洞。

    使用基础结构即代码 (IaC) 验证来强制实施 Azure Databricks 资源的安全配置。

    此外,通过实现安全的源代码管理、在开发工作流中安全地管理凭据,并将自动化安全测试集成到用于数据处理和机器学习模型部署的 CI/CD 管道中来保护开发环境。

  • 提供集中式治理: 通过 Databricks 管道为数据源添加可跟踪性和审核。 Unity 目录提供集中式元数据目录,支持跨工作区的数据发现和世系跟踪,并采用精细的访问控制和验证。

    Unity 目录可以与外部数据源集成。

  • 引入有意的资源分段: 在不同的范围内使用单独的工作区和订阅实施分段。 将生产、开发和沙盒环境分开,以限制潜在安全违规的影响范围。

    通过按照敏感度和功能进行分段:将敏感数据工作负载隔离在专用工作区中,实施更严格的访问控制,并在沙盒环境中进行探索性工作,该环境具有有限的权限,并且没有生产数据访问权限。

  • 实现安全网络访问: Azure Databricks 的数据平面资源(如 Spark 群集和 VM)通过 vNet 注入部署到 Azure 虚拟网络(VNet)。 这些资源将部署到该 VNet 中的子网中。 因此,由 Databricks 平台管理的控制平面独立于数据平面,防止未经授权的访问。 控制平面与数据平面安全通信,以管理工作负荷,而所有数据处理仍保留在网络中。

    vNet 注入通过 Azure 专用网络功能提供对配置、路由和安全性的完全控制。 例如,可以使用 Azure 专用链接来保护与控制平面的连接,而无需使用公共 Internet。 可以使用网络安全组(NSG)来控制子网之间的出口和入口流量,通过 Azure 防火墙、NAT 网关或网络虚拟设备路由流量,以便进行检查和控制。 如果需要,甚至可以将 VNet 与您本地的网络对等互连。

  • 实现授权和身份验证机制: 考虑跨控件和数据平面的 标识和访问管理 。 Databricks 运行时在作业执行期间强制实施自己的安全功能和访问控制,从而创建分层的安全模型。 Azure Databricks 组件(如 Unity 目录和 Spark 群集)与 Microsoft Entra ID 集成,通过 Azure 的内置 RBAC 策略启用访问管理。 此集成还通过单一登录、多重身份验证和条件访问策略等提供企业身份验证。

    请务必了解体系结构依赖于 Databricks 原生安全性的位置,以及它与 Entra ID 相交的位置。 这种双重分层方法可能需要单独的标识管理和维护策略。

  • 加密静态数据: Azure Databricks 与 Azure Key Vault 集成,用于管理加密密钥。 此集成支持客户管理的密钥(CMK),使你能够控制加密密钥的操作,如吊销、审核,以及遵循安全策略。

  • 保护工作负荷机密: 若要运行数据工作流,通常需要存储机密,例如数据库连接字符串、API 密钥和其他敏感信息。 Azure Databricks 原生支持机密作用域,用于将机密存储在可从源代码和作业中安全访问的工作区内。

    机密范围与 Azure Key Vault 集成,使你能够集中引用机密和管理机密。 企业团队通常需要 Key Vault 支持的机密范围,以便实施合规性、安全性和策略。

  • 实现安全监视: Azure Databricks 原生支持审核日志记录,使你能够查看工作区中的管理员活动,例如登录尝试、笔记本访问、权限更改。 此外,Unity 目录访问日志跟踪谁访问了哪些数据、时间和方式。

    使用 Azure Databricks,可以在 Azure Monitor 中查看这些日志。

    安全分析工具(SAT)与 Azure Databricks 工作区完全兼容。

Recommendations

建议 益处
使用 VNet 注入 部署 Azure Databricks 工作区以建立网络隔离,并启用与企业网络基础结构的集成。 配置自定义网络安全组、路由表和子网委派,以控制流量流并强制实施企业安全策略。 VNet 注入消除了群集节点的公共 Internet 公开,并通过自定义路由和防火墙规则提供精细的网络控制。 与本地网络集成可实现安全的混合连接,同时保持符合公司安全标准。
为工作区访问配置 Microsoft Entra ID 单一登录与多重身份验证和 条件访问策略 的集成。 启用自动用户预配和组同步以简化标识管理和强制实施企业身份验证标准。 SSO 集成消除了与密码相关的安全风险,同时通过企业身份验证系统提供集中式标识管理。

条件访问策略添加上下文感知安全控制,用于在授予工作区访问权限之前评估用户位置、设备符合性和风险因素。 这种分层方法可显著减少与身份验证相关的安全漏洞,同时改善用户体验。
部署具有集中式元存储配置的 Unity 目录 ,以在所有 Azure Databricks 工作区之间建立统一的数据治理。 使用目录、架构和表级访问控制,结合常规权限审核,来配置分层权限结构。 Unity 目录提供集中式数据治理,可消除不一致的访问控制,并减少多个工作区之间的安全漏洞。 精细权限支持最低特权访问,而审核日志记录支持合规性要求和安全调查。
激活 客户管理的密钥,以使用 Azure Key Vault 配备自动密钥轮换策略的集成进行工作区存储加密。 为不同的环境配置单独的加密密钥,并为密钥管理作实现适当的访问控制。 客户管理的密钥完全控制加密密钥生命周期管理,并支持数据主权的法规合规性要求。

跨环境的密钥分离可减少安全暴露,而自动轮换策略可维护加密卫生,而不会造成运营开销。 此方法可实现严格的符合性要求,例如 FIPS 140-2 级别 3 或通用标准标准。
使用基于角色的访问控制为集中式凭据管理建立 Azure Key Vault 支持的机密范围 。 实现机密轮换策略,避免在源代码或群集配置中存储凭据。 Key Vault 集成集中了机密管理,同时提供企业级安全控制,包括访问日志记录和自动轮换功能。 此方法消除了代码和配置文件中的凭据公开,同时支持对外部系统和数据库的安全访问。
为受信任的公司网络创建仅允许策略的 IP 访问列表 ,并为已知威胁源创建拒绝规则。 根据安全要求为生产和开发环境配置不同的访问策略。 基于 IP 的访问控制提供了一个额外的安全层,可阻止来自不受信任的网络的未经授权的访问,从而显著减少攻击面。 环境特定的策略可实现适当的安全级别,同时满足网络访问限制的合规性要求。
将所有群集配置为使用 安全群集连接 (无公共 IP),并禁用对群集节点的 SSH 访问。 实现群集访问模式和运行时安全功能,以防止未经授权的代码执行。 安全群集连接可消除计算节点的公共 Internet 公开,同时防止直接 SSH 访问可能会损害群集安全性。 运行时安全功能为群集环境中恶意代码执行和横向移动攻击提供额外的保护。
部署 Azure 专用链接终结点 以进行控制平面访问,消除工作区连接的公共 Internet 传输。 配置专用 DNS 区域,并确保适当的网络路由实现无缝专用连接集成。 专用链接可消除工作区访问的公共 Internet 公开,同时确保所有管理流量都保留在 Azure 的主干网络中。

专用连接为敏感工作负载提供增强的安全性,并支持强制进行专用网络访问的符合性要求。 此配置可显著减少对基于 Internet 的威胁的暴露,同时保持完整的工作区功能。
为需要 HIPAA、PCI-DSS 或 SOC 2 合规性的受监管环境,激活 增强的安全性和合规性 加载项。 为特定法规框架配置自动安全更新并启用符合性安全配置文件。 增强的安全性和合规性提供专门的安全控制,包括合规性安全配置文件、自动安全更新和增强的监视功能。

此托管方法可确保持续符合法规要求,同时降低安全管理的作开销。 自动更新维护安全态势,而不会中断业务运营或需要手动干预。
通过 Unity 目录系统表和工作区审核日志启用 审核日志记录,并使用自动分析和警报。 配置日志保留策略并与 SIEM 系统集成,以便集中进行安全监视和事件响应。 审核日志记录提供用户活动、数据访问模式和系统更改的完整可见性,以便进行安全监视和合规性报告。 与 SIEM 系统集成可以通过集中式日志分析实现自动威胁检测和快速事件响应功能。
为 API 访问和自动化工作负载(而不是个人访问令牌)配置 OAuth 2.0 计算机到计算机身份验证 。 实现适当的令牌范围和生命周期管理,以确保安全的编程访问。 与个人访问令牌相比,OAuth 身份验证通过精细的权限范围和改进的令牌生命周期管理提供增强的安全性。 此方法支持安全自动化,同时维护适当的访问控制和审核线索,以便进行编程工作区交互。
通过为不同环境部署单独的工作区并建立网络分段控制来实现工作区隔离策略。 配置特定于环境的访问策略和数据边界,以防止跨环境数据访问。 工作区隔离可防止环境之间的数据泄漏,同时支持数据隔离和访问控制的符合性要求。 此体系结构可减少安全事件期间的爆炸半径,并启用与风险配置文件匹配的环境特定的安全策略。
使用自动修正建议部署 安全分析工具(SAT), 以便持续进行安全配置评估。 计划定期安全扫描并将发现结果集成到 CI/CD 管道中,以便进行主动安全管理。 自动安全评估针对安全最佳做法和合规性要求持续监视工作区配置。

与开发工作流集成后,可以通过向左移动的安全做法识别和解决错误配置,然后再到达生产环境。 这种主动方法可显著降低安全风险,同时最大程度地降低修正成本和运营中断。
为自动化工作流和 CI/CD 管道配置 服务主体身份验证 ,同时具有最少所需的权限。 通过 Azure Key Vault 实现凭据管理,并启用基于证书的身份验证以提高安全性。 服务主体身份验证消除了对自动化过程的用户凭据的依赖关系,同时提供适当的访问控制和审核线索。 与客户端机密相比,基于证书的身份验证提供了增强的安全性,同时支持针对生产自动化方案进行适当的凭据生命周期管理。
使用自定义路由表和网络安全组通过 VNet 注入 建立网络出口控制,以监视和限制数据传输。 配置 Azure 防火墙或网络虚拟设备以检查和控制出站流量模式。 网络出口控制可防止未经授权的数据外泄,同时通过流量监视和分析提供对数据移动模式的可见性。 自定义路由和防火墙检查可检测可能指示安全漏洞或内部威胁的异常数据传输活动。
激活 Microsoft Entra ID 凭据直通以访问 Azure Data Lake Storage,消除服务主体依赖项。 配置用户特定的访问控制,并确保权限继承符合 Unity Catalog 治理策略。 凭据传递消除了管理服务主体进行数据访问的复杂性,同时提供与企业标识系统的无缝集成。

用户特定的访问控制可确保数据访问权限与组织策略和作业功能保持一致。 此方法简化了凭据管理,同时为数据湖操作维护强大的安全控制和审计能力。
实施 群集强化 做法,包括 SSH 限制、自定义映像扫描和运行时安全控制。 使用批准的基础映像,并通过群集策略和初始化脚本验证防止未经授权的软件安装。 群集强化通过 SSH 限制减少攻击面,并防止未经授权的软件安装可能会损害群集安全性。 自定义映像扫描可确保基本映像符合安全标准,而运行时控制可防止群集环境中的恶意代码执行和横向移动。
通过 CI/CD 管道与 静态分析工具和漏洞扫描程序集成,实现源代码和代码项目的自动安全扫描 自动安全扫描可在分析代码和基础结构配置到达生产环境之前提前检测分析代码和基础结构配置中的安全漏洞。

成本优化

成本优化支柱的目的是 管理成本,以最大化交付的价值

成本优化设计原则为实现这些目标并在 Azure Databricks 体系结构中进行权衡提供了高级设计策略。

工作负荷设计清单

根据 成本优化设计评审清单启动你的设计策略。 定义策略和过程,以持续监视和优化成本,同时满足性能要求。

  • 确定成本驱动因素: 理论容量规划往往导致过度预配和浪费的支出,相反,不投资足够的资源是有风险的。

    根据工作负荷行为估算成本并寻求优化机会。 运行试点工作负荷、基准群集性能和分析自动缩放行为。 实际使用情况数据有助于调整群集大小、设置缩放规则并分配正确的资源。

  • 为支出设置明确的责任: 使用多个 Azure Databricks 工作区时,跟踪哪些团队或项目负责特定成本非常重要。 这需要使用项目或成本中心信息标记资源(如群集或作业),使用退款模型将基于使用情况的成本分配给团队,以及设置预算控制来监视和限制支出。

  • 选择适当的层: 建议使用用于开发和基本生产工作负荷的标准层;生产工作负荷的高级层,因为它提供安全功能,例如 Unity 目录,这是大多数分析工作负载的核心。

  • 在无服务器计算与 VM 之间进行选择: 对于无服务器,只需为使用的内容付费(基于消耗)。 对于突发工作负荷或按需作业,建议使用无服务器架构,因为它可以自动扩展,并减少运营开销。 无需管理基础结构或为空闲时间付费。

    对于可预测的或稳定的使用情况,选择基于 VM 的群集。 这为你提供了更多的控制,但需要作管理和优化以避免过度预配。 如果确定长期使用,请使用预留容量。 Databricks 承诺使用单位(DBCU)是通过预先支付合同获得折扣的一种方式,旨在交换使用承诺。

    请确保分析历史趋势和预测未来需求,以做出最佳选择。

  • 优化群集利用率: 无需群集时,通过自动缩放和关闭群集来降低 Azure Databricks 成本。

    请评估您的预算是否能支持群集池。 虽然它们可以减少群集启动时间,但它们是空闲资源,即使未使用,也会产生基础结构成本。

    使用缩减配置节省开发/测试环境中的成本。 鼓励群集在团队之间共享,以避免创建不必要的资源。 强制实施自动终止策略以取消预配空闲群集。

  • 针对每个工作负荷优化计算: 不同的工作负荷需要不同的计算配置。 某些作业可能需要更高的内存、处理能力,而另一些作业可能运行轻型作业,从而降低成本。 选择正确的群集来完成正确的任务。

    将正确的群集分配给每个作业,而不是将所有任务都分配到同一个大型群集。 借助 Azure Databricks,可以定制计算资源以匹配每个工作负荷,从而降低成本并提高性能。

  • 优化存储成本: 存储大量数据可能会变得昂贵。 尝试使用 Delta Lake 功能降低成本。 例如,数据压缩允许将许多小文件合并为更少的大型文件,以减少存储开销并加快查询速度。

    努力管理旧数据。 可以使用保留策略删除过时的版本。 此外,可以将较旧的不经常访问的数据移到更便宜的存储层。 如果适用,自动化生命周期策略(如基于时间的删除或分层规则)有助于存档或删除数据,因为它变得不那么有用,使存储保持精简。

    不同的存储格式和压缩设置还可以减少使用的空间量。

  • 优化数据处理技术: 在处理大量数据时,会产生与计算、网络和查询相关的成本。 若要降低成本,请使用用于查询优化、数据格式选择和 Delta Lake 和代码优化的策略组合:

    • 最小化数据移动。 评估数据处理管道,以减少不必要的数据移动和带宽成本。 实现增量处理以避免重新处理未更改的数据,并使用缓存来存储离计算资源更近的频繁访问的数据。 减少连接器访问或与外部数据源集成时的开销。

    • 使用高效的文件格式。 如 Parquet 等格式和如 Zstandard 等 Databricks 原生的压缩算法能够实现更快的读取速度,并由于移动的数据减少而降低了数据成本。

    • 提高查询效率。 避免全表扫描以降低计算成本。 而是基于常用的筛选列对 Delta 表进行分区。 使用本机功能减少计算时间。 例如,本机 Spark 功能(如 Catalyst Optimzer 和自适应查询执行)用于在运行时动态优化联接和分区。 Databricks Photon 引擎加速查询执行。

    • 在 Azure Databricks 环境中应用代码优化设计模式,例如竞争消费者、基于队列的负载调平和计算资源整合。

  • 监视使用情况: Databricks Unit (DBU) 是基于计算使用情况的抽象计费模型。 Azure Databricks 提供有关群集、运行时小时数和其他组件的使用情况指标的详细信息。 使用该数据进行预算规划和控制成本。

  • 拥有自动支出防护措施: 若要避免过度使用和高效使用资源,请强制实施阻止或规范资源使用的策略。 例如,对可以创建的群集类型进行检查,限制群集大小或其生存期。 此外,设置警报,以便在资源使用量接近允许的预算边界时收到通知。 例如,如果某个作业突然开始使用 10×更多 DBU,脚本可以通知管理员或将其关闭。

    利用 Databricks 系统表来跟踪群集使用情况和 DBU 使用情况。 可以查询表以检测成本异常。

Recommendations

建议 益处
为计划工作负荷而不是通用群集部署 作业群集 ,以消除空闲计算成本,并在作业完成时配置自动终止。 作业群集通过在作业完成后自动终止以降低成本,最多可节省 50%。通过精确匹配计算时间与实际的处理需求,优化了 DBU 消耗。
根据工作负荷分析启用群集 自动缩放 ,并基于工作负荷分析仔细配置最小和最大节点限制,以处理基线负载和峰值需求要求。

配置缩放策略以快速响应工作负荷更改,同时避免不必要的缩放振荡,从而增加不必要的成本。
与固定大小的群集相比,自动缩放可降低 20-40% 过度预配成本,同时在高峰期保持性能级别,并在低需求期间自动减少资源。
根据使用模式为所有交互式群集配置自动终止,适当的超时期限通常为开发环境中的30到60分钟。 自动终止可降低交互式群集成本 60-80%,而不会影响用户工作效率,消除了群集在夜间或周末运行的成本。
采用 无服务器 SQL 仓库 进行交互式 SQL 工作负荷,以消除基础结构管理开销,并通过基于消耗的计费优化成本。

根据并发要求配置适当的大小调整,并启用自动停止功能,以将非活动期间的成本降到最低。

利用内置的 Photon 加速功能,从经典 SQL 终结点迁移到无服务器 SQL 仓库,以提高性能和成本效益。
与基于使用情况的计费相比,无服务器 SQL 仓库通过基于使用情况的计费减少了 30-50% 的 SQL 工作负荷费用,从而消除了空闲时间成本。

内置的 Photon 加速提供高达 12 倍的性能提升,同时确保交互式分析场景中每次查询成本的可预测性。
为常用配置实现 群集池 ,以减少启动时间,并根据使用模式和需求预测优化资源分配。 群集池将启动时间从几分钟缩短到几秒钟,同时消除空闲池实例的 DBU 收费,为开发团队经济高效地提供资源。
使用 Delta Lake 的优化功能,包括 OPTIMIZE 命令、Z-ORDER 聚类和 VACUUM 操作,来降低存储成本并提高查询性能。

计划定期优化作业以压缩小型文件、实现数据保留策略,并根据数据访问模式配置压缩设置。
Delta Lake 优化通过数据压缩和高效压缩将存储成本降低 40-60%,同时通过降低文件扫描要求来提高查询性能。
通过限制实例类型和强制自动终止设置,实施 计算策略 ,在所有工作区和团队中强制实施经济高效的配置。

为开发、过渡和生产环境创建不同的策略模板,这些环境具有不同级别的限制和成本归属的适当标记。
计算策略通过防止过度预配并确保遵守成本优化标准,同时保持治理,将平均群集成本降低 25-35%。
使用 Databricks 系统表Azure 成本管理集成 监视成本,以深入了解 DBU 消耗模式和支出趋势。

实现自动化成本报告仪表板,用于跟踪工作区、用户、作业和群集类型的使用情况,同时为主动管理配置成本警报。

使用 Unity 目录系统表分析详细的使用模式,并根据实际资源消耗为不同的团队和项目创建退款模型。
全面的成本监视提供 DBU 消耗模式的可见性,并通过详细的使用情况分析和标记策略实现准确的成本归属。 与 Azure 成本管理集成可实现组织范围的成本治理,并帮助跨团队建立责任制,从而形成更负责任的资源使用模式。
通过 Databricks Commit Units(DBCU)购买 Databricks 预留容量,以满足具有稳定使用模式和最佳承诺条款的可预测工作负载。 与即用即付定价相比,预留容量通过 DBCU 实现 20-40% 成本节省,同时为稳定的生产工作负荷提供超过 1-3 年的成本可预测性。
为不同的用例(例如 ETL 管道的作业群集和 ML 训练的 GPU 实例选择适当的 计算类型 )来优化特定于工作负荷的计算配置。

将实例类型和群集配置与特定的工作负荷要求匹配,而不是在所有方案中使用通用配置。
工作负荷特定的优化通过消除过度预配,以及利用针对特定用例优化的专用计算类型,与通用型方法相比可将成本降低30-50%。
使用计划的清理作(包括 VACUUM 命令、日志文件保留和基于业务需求的检查点管理)实现自动化数据生命周期策略。 自动化生命周期管理通过系统删除不必要的数据版本、日志和临时文件,同时防止存储膨胀,从而将存储成本降低 50-70%。
标准层 用于开发和测试环境,同时仅将高级层应用于需要高级安全功能和符合性认证的生产工作负荷。 战略层选择将标准层用于不需要高级安全功能的非生产工作负荷,将许可成本优化最多 30%。

高级层功能(如 RBAC 和审核日志记录)仅在业务要求和安全策略证明额外的成本投资合理的情况下适用。
为具备不可预测调度模式或资源要求的临时分析和实验负载的可变和间歇性工作负载实施 无服务器作业

为批处理作业配置无服务器计算,其中使用模式难以预测并利用自动优化功能。

根据使用情况分析和成本效益评估将适当的工作负荷从传统群集迁移到无服务器计算,以优化资源利用率。
无服务器作业消除了空闲时间成本,并为可变资源要求提供自动优化,从而使不可预知的工作负载成本降低40-60%。

基于消耗的计费模型可确保仅为使用的实际计算时间付费,使其非常适合开发环境和具有自动资源优化的零星生产工作负荷。
通过 Azure 成本管理和 Databricks 使用情况监视 配置成本警报和预算,以启用具有多个警报阈值的主动成本管理。

为不同的利益相关者组设置升级程序,并通过常规预算评审为关键成本超支实施自动化响应。
主动成本监控可提前检测成本异常和预算超支,防止意外费用,并能在成本对预算产生显著影响之前及时进行干预。
优化数据格式并启用 Photon 加速 ,通过使用列式存储格式和压缩算法进行高效数据处理,减少计算时间。

实现分区策略,尽量减少数据扫描要求,并为支持的工作负载启用 Photon 加速,以利用矢量化查询执行。
数据格式优化和 Photon 加速通过列式存储优化和矢量化查询执行功能将计算时间和成本降低 30-50%。

随着数据量的增长,这些优化会随着时间推移而复合,从而为分析工作负载和复杂的数据处理管道提供更高的成本优势,而无需进行体系结构更改。

卓越运营

卓越运营主要侧重于 开发实践、可观测性和发布管理的各个过程。 卓越运营设计原则 提供了一个高级设计策略,用于实现这些运营需求目标。

工作负荷设计清单

根据 卓越运营的设计评审清单 启动设计策略,以定义与 Azure Databricks 相关的可观测性、测试和部署过程。

  • 收集监视数据: 对于 Azure Databricks 工作负荷,专注于跟踪关键领域,例如群集运行状况、资源使用情况、作业和管道、数据质量和访问活动。 使用这些指标获取见解,以确认系统在预期性能中提供功能。 此外,它们还可用于审核如何访问和使用和强制执行治理的数据和资源。

    • 监视群集: 监视 Azure Databricks 群集时,请专注于反映性能和效率的指标。 跟踪总体群集运行状况,并观察跨节点使用 CPU、内存和磁盘等资源的方式。

    • 监控作业和管道: 捕获反映执行流程的相关指标。 这包括跟踪作业成功率和失败率,以及运行持续时间。 此外,收集有关如何触发作业以阐明执行上下文的信息。

      使用 Databricks 系统表可以本地化方法俘获作业状态、依赖链和吞吐量。

    • 监视数据源连接。 监视与外部系统的集成和依赖项。 这包括捕获数据源连接状态、跟踪 API 依赖项以及观察服务主体身份验证行为。 Unity 目录可用于管理和监视外部位置,帮助识别潜在的访问或配置问题。

    • 监视数据质量: 收集用于验证数据完整性和新鲜性的信号。 这包括使用自动加载程序等工具监视架构演变问题,以及实现执行完整性检查、null 值检测和异常识别的规则。 可以使用 Lakeflow 声明性管道在数据处理期间强制实施内置质量约束。

      此外,通过 Unity Catalog 捕获数据血统有助于跟踪数据在系统间的流动和转换方式,确保管道的透明性和问责性。

    Azure Databricks 的内置监视工具与 Azure Monitor 集成。

  • 设置自动化和可重复的部署资产: 使用基础结构即代码(IaC)定义和管理 Azure Databricks 资源。

    自动预配工作区,包括区域选择、网络和访问控制,以确保环境之间的一致性。 使用群集模板标准化计算配置,降低配置错误的风险并提高成本可预测性。 此外,使用 JSON ARM 模板等格式将作业和管道定义为代码,使其版本控制和可重现。

    使用 Databricks 资产捆绑包 通过适当的分支策略和回滚过程对 Git 存储库中的笔记本源代码、作业配置、管道定义和基础结构设置进行版本控制。

  • 自动执行部署: 使用 Azure Databricks 中的 CI/CD 管道自动部署管道、作业配置、群集设置和 Unity 目录资产。 考虑用于版本控制的 Databricks Repos、用于管道自动化的 Azure DevOps 或 GitHub Actions 等工具,以及打包代码和配置的 Databricks 资产捆绑包等工具,而不是手动推送更改。

  • 自动执行例程任务: 常见自动化包括管理群集生命周期(如计划的启动/停止),清理日志,验证管道运行状况。 通过与逻辑应用或 Functions 等 Azure 工具集成,团队可以构建自我修复工作流,以自动响应问题,例如重启失败的作业或缩放群集。 此类自动化是在工作负荷增长的情况下保持可靠、高效的 Azure Databricks 操作的关键。

  • 具有强大的测试做法: 特定于 Azure Databricks 的策略包括笔记本代码的单元测试、数据管道的集成测试、Lakeflow 声明性管道逻辑的验证、Unity 目录的权限测试以及验证基础结构部署。 这些做法有助于尽早发现问题并减少生产事件,

  • 开发运行手册来处理事件:运行手册 提供结构化的分步指南来处理常见的 Azure Databricks 场景。 这些Runbook包括诊断命令、日志位置、升级联系人、恢复程序,并包含估计的解决时间,以实现跨团队一致且快速的事件响应。

  • 开发备份和恢复过程:备份和恢复过程 通过保护工作区配置、分析源代码、作业定义和数据资产来确保业务连续性,以及自动备份计划和跨区域复制,以满足恢复时间和恢复点目标。

  • 实现团队协作和知识管理: 团队协作做法通过共享工作区组织、笔记本协作功能和文档标准优化 Azure Databricks 工作效率,这些标准有助于跨开发团队进行知识转移并减少项目重复。

Recommendations

建议 益处
配置 Azure Databricks 工作区的 诊断设置 ,以将平台日志、审核日志和群集事件发送到 Azure Monitor Log Analytics 工作区。

启用所有可用的日志类别,包括工作区、群集、帐户、作业、笔记本和 Unity 目录审核日志,以实现可观测性覆盖。
集中 Log Analytics 中的所有 Azure Databricks 遥测数据,启用高级 KQL 查询,以便进行故障排除、针对关键事件的自动警报以及合规性报告。 为主动操作管理提供统一的可见性,以跨工作区活动、集群性能和数据访问模式实现主动操作管理的目的。
使用 Azure 资源管理器模板 或具有参数化配置的 Bicep 文件部署 Azure Databricks 工作区,以便进行一致的环境预配。

在模板定义中包含工作区设置、网络配置、Unity 目录启用和安全策略,以确保跨开发、测试和生产环境进行标准化部署。
消除环境之间的配置偏差,并通过一致的版本控制的基础结构定义减少部署错误。

与手动部署过程相比,将环境预配加速 70%,并在灾难场景中通过自动化工作区娱乐实现快速恢复。
使用 Databricks Repos 将 Azure Databricks 笔记本和其他源代码与 Git 存储库 集成,以便进行源代码管理和协作开发。

通过 Azure DevOps 或 GitHub Actions 配置自动化 CI/CD 管道,将源代码更改、作业和管道配置、以及群集模板在跨环境中进行部署,并使用适当的测试和审批工作流。
支持使用版本历史、基于分支的工作流进行协作开发,并解决代码合并冲突。 通过自动化测试和分阶段发布来降低部署风险,同时维护所有生产更改的完整审核线索。
使用 Azure Databricks 群集指标和 Azure Monitor 数据部署自动化 群集权限解决方案 ,以分析利用率模式,并推荐最佳实例类型和大小。

根据 CPU、内存和作业队列指标配置自动缩放策略,以便根据工作负荷需求自动调整群集容量。
通过自动将群集资源与实际工作负荷要求相匹配来优化基础结构成本,从而防止过度预配浪费。 通过智能资源分配和自动缩放决策将计算成本降低 30-50% 的同时,维护性能 SLA。

消除手动监控的负担,并通过数据驱动的见解主动管理容量,以充分利用资源使用模式和优化机会。
激活 Unity 目录审核日志记录 ,以跟踪 Azure Databricks 工作区中的所有数据访问作、权限更改和治理活动。

配置日志保留策略并与 Azure Sentinel 或第三方 SIEM 解决方案集成,以便自动进行安全监视和合规性报告。
为 SOX、HIPAA 和 GDPR 等法规合规性框架所需的数据访问模式、权限修改和治理作提供完整的审核线索。 通过集中式安全监视启用对可疑数据访问行为的自动威胁检测和调查。
使用数据质量预期和监视规则实现 Lakeflow 声明性管道 ,以自动执行数据验证和管道质量保证。

为数据质量违规配置预期阈值、隔离策略和自动警报,以维护管道可靠性和数据完整性。
使用声明性规则自动执行数据质量验证,防止不良数据传播下游,减少手动验证工作量 80%。 提供透明数据质量指标和自动化修正工作流,以保持管道可靠性和业务对数据准确性的信心。
使用 Databricks REST API 和 Azure 自动化运行手册为 Azure Databricks 工作区的资源建立自动备份程序。

安排定期备份分析源内容、作业定义、群集配置和工作区设置,使用 Azure 存储帐户的版本化存储和跨区域复制功能。
确保通过自动还原功能从意外删除、配置更改或工作区损坏中快速恢复。 通过版本控制备份保持业务连续性,并通过标准化的备份和还原过程将恢复时间目标从几天缩短到数小时。
创建包含项目代码、环境指示器和团队所有权的命名约定的标准化 工作区文件夹层次结构

使用适当的访问控制实现常见库、模板和文档的共享文件夹,以便于知识共享和协作。
通过一致的工作区组织提高项目可发现性并减少新团队成员的入职时间。 通过共享代码库和标准化项目结构加速开发,从而消除跨团队的重复工作。
使用 Azure Databricks 工作区、群集和计算资源的资源标记策略配置 Azure 成本管理

实现成本警报、预算阈值和自动化报告,以跟踪项目、团队和环境的支出,并提供退款功能和优化建议。
通过详细的支出分析和自动化预算监控,实现跨组织单位的精细成本可见性和问责。 通过支出警报和使用情况模式见解实现主动成本优化,防止预算溢出并识别优化机会。

支持准确的成本分配和退款过程,以及基于资源标记的详细资源利用率报告和自动化成本中心分配。
为 Azure Databricks 与外部系统、数据源和 Azure 服务集成配置 服务主体身份验证

尽可能实现托管标识,并使用 Azure Key Vault 集成建立凭据轮换策略,以实现安全、自动化的身份验证管理。
消除共享凭据安全风险,无需手动干预即可实现自动身份验证。 通过审核线索提供集中式凭据管理,并支持符合最低特权安全原则的精细访问控制策略。
使用自动终止计划、空闲超时配置和资源使用限制建立 群集生命周期策略 ,以强制实施组织治理标准。

配置基于策略的群集创建限制、实例类型限制和最大运行时控制,以防止资源浪费并确保符合性。
通过自动化群集生命周期管理将计算成本降低 40-60%,并防止由于闲置或遗忘群集而导致的资源浪费。 在所有用户和团队中一致地执行组织政策,同时在合法用例上保持作业的灵活性。
为关键的 Azure Databricks 操作(包括群集故障、作业执行错误、工作区容量限制和 Unity Catalog 访问冲突)部署 Azure Monitor 警报规则

配置包含升级程序的自动化通知工作流,并与 ServiceNow 或 Jira 等事件管理系统集成。
在影响业务运营之前,通过对关键问题的实时通知启用主动事件响应。

将平均检测时间从小时缩短到几分钟,并支持自动升级过程,确保根据严重性级别通知适当的团队成员。
使用 基于角色的访问控制 策略实现特定于环境的工作区配置,这些策略强制在开发、测试和生产环境之间进行分离。

配置适用于每个环境的安全性和符合性要求的 Unity 目录治理规则、网络安全组和数据访问权限。
防止未经授权的访问生产数据,并通过强制实施的安全边界降低关键环境中意外更改的风险。

通过确保开发活动不会影响生产系统,并且跨环境边界保留数据完整性,从而保持法规合规性。

性能效率

性能效率就是通过管理容量来保持用户体验,即使负载增加也不例外。 该策略包括缩放资源、识别和优化潜在瓶颈,以及优化峰值性能。

性能效率设计原则 提供了一个高级设计策略,用于根据预期使用量实现这些容量目标。

工作负荷设计清单

根据性能效率设计审查清单开始策略设计。 定义基于 Azure Databricks 的关键绩效指标的基线。

  • 执行容量规划: 分析工作负荷并监视资源使用情况,以确定工作负荷实际需要的计算和存储量。 使用该见解来正确调整群集大小、优化作业计划并预测存储增长,从而避免预配不足,这会导致资源约束。

  • 为工作负荷特征选择最佳计算配置: 评估无服务器选项,它可以提供更好的自动缩放速度,更快的启动时间。 将它们与传统群集进行比较,以选择最适合的群集。

    对于群集,请根据数据量和处理模式优化配置,包括实例类型、大小、缩放设置。 请务必分析实例系列之间针对特定用例的权衡。 例如,评估内存优化实例与计算优化实例、本地 SSD 与标准存储选项,以满足性能要求。

    Spark 群集可以运行不同类型的工作负荷,这需要其独特的性能优化。 通常,需要更快的作业执行并避免计算瓶颈。 微调执行程序内存、并行度和垃圾回收等设置,以实现这些目标。

    如需有关如何为工作量选择合适服务的更多指导,请参阅选择服务的建议

  • 确定关键工作负荷的资源分配的优先级: 将工作负荷分开并设置同时运行的优先级。 使用资源池、群集池、隔离模式和作业队列等功能以避免作业之间的干扰。 设置资源配额和计划规则,防止高优先级任务被后台或低优先级进程减慢。

  • 为变量工作负荷配置自动缩放: 通过定义导致群集缩放的缩放触发器、添加或删除节点的速度和资源限制,在 Azure Databricks 中设置自动缩放策略。 这些设置可帮助 Azure Databricks 有效地响应不断变化的工作负荷、优化资源使用情况,并避免在缩放事件期间出现性能问题。

  • 设计高效的数据存储和检索机制: 数据密集型作的性能提升,尤其是对大量数据的性能提升需要仔细规划和优化。

    • 以战略方式组织数据。 设计在组织 Delta Lake 表时优化查询性能的数据分区方案。 良好的分区允许分区修剪,其中 Spark 在查询期间仅读取相关数据子集,而不是扫描整个表。

      文件大小调整起着关键作用,文件太小会导致元数据开销过大并降低 Spark 作业速度,而太大的文件可能会导致内存和性能问题。

      将您的数据布局设计与用户或任务通常查询数据的方式保持一致。 否则,完整表扫描可能会造成性能影响。

    • 实现有效的缓存: 对热数据集使用缓存并监视缓存命中率,以确保不会不必要的使用内存。 Spark 提供内置缓存机制,而 Azure Databricks 提供 Delta 缓存,通过在跨节点的磁盘级别缓存数据来进一步优化性能。

    • 编写高效的查询: 避免不必要的数据扫描、过度洗牌和长时间的执行时间,这都会导致性能效率低下。

      通过适当的索引编制、谓词下推、投影下推技术以及联接优化技术,优化 SQL 查询和 Spark 操作。这些技术利用查询计划分析来提高执行效率。

      Azure Databricks 提供一些内置优化。 Catalyst 优化器重写查询语句以提高效率,而自适应查询执行(AQE)在运行时调整查询计划,以解决数据倾斜问题并改善联接性能。 Delta Lake 功能(如表统计信息、Z 顺序群集和 Bloom 筛选器)进一步减少扫描的数据,从而加快、更具成本效益的查询。

    • 选择正确的数据格式和压缩: 选择 Parquet 和智能压缩算法(例如 ZSTD)等格式,以减少存储和加快读取速度,而不会影响性能。

  • 优化网络和 I/O 性能: 选择高性能存储选项(例如高级存储或 SSD 支持的存储),并设计体系结构,通过处理靠近存储位置的数据来最大程度地减少数据移动。

    此外,使用高效的数据传输策略,例如批处理写入,并避免不必要的混排,以最大程度地提高吞吐量并减少延迟。

  • 根据工作负荷类型优化作业执行:。 根据特定需求定制优化策略,例如

    • 流处理:实时数据管道需要低延迟和高吞吐量性能。 在 Azure Databricks 中,这意味着优化参数,例如触发器间隔、微批大小、水印和检查点。 使用结构化流式处理和 Delta Lake 功能(如架构演变和精确一次)可确保在不同负载下进行一致的处理。
    • 机器学习:ML 训练和推理作业通常是计算密集型作业。 可以使用分布式训练、GPU 加速和高效的特征工程管道来提高性能。 Azure Databricks 支持通过 MLflow、Databricks Runtime for ML 进行 ML 性能优化,并与 Horovod 等工具集成。 优化资源配置并应用数据预处理优化可以显著减少训练时间和推理延迟。

    使用 Lakeflow 声明性管道可以简化和自动实施这些优化建议。

  • 使用监视系统确定性能瓶颈: 实施 全面的性能监视 ,以便了解作业、群集和查询的执行方式,以确定导致成本上升和降低工作负荷的瓶颈或效率低下。

    分析关键指标(例如 CPU 和内存使用率、作业执行时间、查询延迟和群集运行状况)中的异常。 这允许你确定速度放缓,无论它们是由 Spark 配置差、未优化查询还是过度预配的群集引起的。

    使用 Spark UI 等内置工具分析查询计划和作业阶段、Azure Monitor 跟踪基础结构级指标以及自定义指标或日志,以获取更深入的见解。 这些工具支持主动优化,使你能够在问题影响用户或关键管道之前解决问题。

  • 进行系统的性能测试: 使用负载测试、压力测试和基准测试来验证执行时间、资源使用情况和系统响应能力。 通过建立性能基线并将自动测试合并到 CI/CD 管道中,可以提前检测速度放缓并衡量任何优化的影响。

Recommendations

建议 益处
在处理需要大量内存中缓存、机器学习模型训练或复杂分析作的大型数据集时,使用 内存优化实例类型 (例如 E 系列或 M 系列 VM)配置 Azure Databricks 群集。

根据数据集大小和处理模式评估内存需求,然后选择适当的 VM 大小,以便提供足够的内存容量与 CPU 比率,以获得最佳性能。
消除可能导致作业故障或严重性能下降的内存瓶颈,从而顺利执行内存密集型作,例如大规模机器学习训练和复杂的分析工作负荷。
根据工作负荷模式和性能要求,使用适当的最小和最大节点限制配置 群集自动缩放策略 。 设置最小节点以高效处理基线工作负荷,同时建立最大限制以防止失控成本。

定义基于 CPU 利用率、内存使用情况或作业队列深度的缩放触发器,并配置缩放速度以平衡响应能力与成本优化。
在需求波动期间保持一致的性能,同时通过自动资源调整来优化成本,在高峰期纵向扩展,并在低利用率期间纵向缩减。
对 Delta Lake 表执行 Z 排序的 OPTIMIZE 命令 ,以提高数据群集和查询性能。 根据您查询中常用的筛选条件和联接条件选择 Z 顺序列,这通常包括在 WHERE 子句、GROUP BY 操作和 JOIN 谓词中使用的列。

使用 Azure Databricks 作业或 Lakeflow Declarative Pipelines 安排定期优化操作,以在数据增长时保持最佳性能。
通过改进的数据跳过和最小化 I/O作,将查询执行时间缩短 3-10 倍,同时通过将相关数据聚集到一起提供更好的压缩率来降低存储成本。

提供累积性能改进,因为随着时间推移优化,定期维护和智能数据组织与实际查询模式保持一致。
在群集配置上启用 增量缓存 ,可在群集配置中频繁跨多个查询或作业访问相同的数据集。 配置缓存设置以有效利用本地 NVMe SSD 存储,确保根据数据集特征和访问模式进行足够的缓存大小分配。

监视缓存命中率并调整缓存配置,以最大程度地提高特定工作负荷的性能优势。
通过基于 SSD 的智能缓存(绕过网络存储速度较慢的缓存)将查询性能提高 2-5 倍,从而显著缩短迭代分析和机器学习工作负载的延迟。
在群集配置和 SQL 仓库上启用 Photon 引擎 ,以通过矢量化执行加速 SQL 查询和数据帧作。 Photon 为具有聚合、连接和复杂 SQL 操作的分析工作负载提供了最显著的优势。

为处理大型数据集的数据工程管道、商业智能工作负载和分析应用程序配置已启用 Photon 的计算资源。
通过本机矢量化执行为 SQL 和数据帧作提供高达 12 倍的性能改进,同时通过提高处理效率和缩短执行时间,将计算成本降低 2-3 倍。

支持在同一时间约束内处理较大的数据集,并支持更多并发用户,而不会降低性能,显著提高了整体系统吞吐量。
根据最大的数据集大小和处理复杂性,为每个执行程序配置 2-8GB 之间的 Spark 执行程序内存设置 和驱动程序内存。 将 spark.executor.cores 设置为每个执行程序 2-5 个核心,以平衡并行度与资源效率。

根据特定的工作负荷特征、数据量和群集大小调整这些设置,以防止内存不足错误,同时最大程度地提高资源利用率。
防止作业失败,同时优化资源分配效率,通过正确调整的内存配置减少执行时间和不必要的资源浪费。
为需要高 IOPS 和低延迟的 Azure Databricks 工作负荷配置高级 SSD 性能层的 Azure 存储帐户。 使用 Premium Block Blob 存储用于需要大量读/写操作的数据湖场景。

确保存储帐户与 Azure Databricks 工作区位于同一区域,以最大程度地减少网络延迟。
提供高达 20,000 IOPS 和亚毫秒级的延迟,从而显著提高数据密集型工作负荷的性能,并通过消除存储 I/O 瓶颈减少作业执行时间。
根据查询中常用的筛选列设计 数据分区策略 ,通常是时序数据的日期列或维度数据的分类列。 通过将分区限制为小于 10,000,并确保每个分区至少包含 1GB 的数据来避免过度分区。

使用支持分区修剪的查询模式,并考虑针对具有多个分区候选项的表进行液态聚类。
通过有效的分区修剪减少数据扫描 80-95%,通过仅处理相关的数据分区来显著改善查询性能并降低计算成本。

启用可预测的查询性能,该查询性能使用筛选的数据大小而不是总表大小进行线性缩放,从而在数据集增长到 PB 级时保持一致的响应时间。
Parquet 文件格式 与 ZSTD 或 Snappy 压缩配合使用,以便分析工作负荷优化存储效率和查询性能。 ZSTD 为冷数据提供更好的压缩比,而 Snappy 为经常访问的数据集提供更快的解压缩速度。

配置适当的压缩级别,并根据访问模式和存储成本评估压缩权衡。
通过列式存储效率和优化压缩,不仅降低存储成本60-80%,还提高查询性能,从而能够实现更快的数据扫描并减少网络 I/O。
为需要临时查询和交互式分析的商业智能和分析工作负荷部署 无服务器 SQL 仓库 。 根据并发要求和查询复杂性配置适当的仓库大小(2X-Small 到 4X-Large)。

启用自动停止和自动恢复功能以优化成本,同时确保最终用户的快速查询响应能力。
消除群集管理开销,同时提供即时缩放和 Photon 加速性能,与 SQL 工作负载的传统群集相比,提供 2-3 倍更高的性价比。

提供一致的次秒查询启动时间和自动优化,以适应不断变化的工作负荷模式,而无需手动干预或配置优化。
在 Spark 配置中启用 自适应查询执行(AQE), 以利用运行时优化功能,包括动态合并随机分区、动态联接策略切换和倾斜联接优化。

根据您的典型数据量和群集特征,配置 AQE 参数,如目标洗牌分区大小和合并阈值。
通过适应实际数据特征和执行模式的智能运行时优化,将查询性能提高 20-50%,从而自动解决小文件和数据倾斜等常见性能问题。
创建预热实例与最常见的群集配置匹配的 群集池 ,以减少交互式群集和作业群集的启动时间。

根据预期的并发使用模式配置池大小,并在高峰时段维护空闲实例,以确保开发团队和计划作业的即时可用性。
将群集启动时间从 5-10 分钟缩短到 30 秒以下,极大地提高了开发人员的工作效率,并为时间敏感的数据处理工作流启用更快的作业执行。
使用 Azure Databricks 作业定期计划 OPTIMIZE 操作,以便压缩小型文件并提高查询性能,并运行 VACUUM 命令来清理过期的事务日志和已删除的文件。 根据数据引入模式配置优化频率,通常每天为大容量表配置优化频率,对于更新频率较低的表,每周配置一次。

监视表统计信息和文件计数,以确定最佳维护计划。
通过防止文件激增和数据碎片来保持一致的查询性能,同时通过清理不必要的文件并减少存储成本并提高压缩率。

为了防止数据湖中因缺乏适当维护而经常发生的性能随时间下降,确保可预测的查询响应时间和资源的最优利用。
根据延迟要求和数据到达模式配置 结构化流式处理触发器间隔 ,对次秒延迟需求使用连续触发器或具有 1-10 秒间隔的微批处理触发器进行均衡性能。 使用快速存储优化检查点位置,并配置适当的检查点间隔,以平衡容错与性能开销。 实现实时数据处理延迟和吞吐量之间的最佳平衡,实现一致的流处理性能,能够处理不同的数据到达率,同时保持低端延迟。
使用 NC、ND 或 NV 系列虚拟机部署 启用了 GPU 的群集 ,以便进行深度学习模型训练和推理工作负荷。 配置适当的 GPU 内存分配,并利用 MLflow 进行分布式训练编排。

根据模型复杂性和训练数据集大小选择 GPU 实例类型,考虑特定机器学习工作负载的内存容量和计算性能要求。
通过专为机器学习作设计的并行处理功能,将模型定型速度提高 10-100 倍,从而大幅缩短训练时间,并加快模型迭代周期。

Azure 策略

Azure 提供了一组与 Azure Databricks 及其依赖项相关的大量内置策略。 可以通过 Azure Policy 审核上述一些建议。 例如,可以检查以下情况:

  • Azure Databricks 工作区使用 VNet 注入增强网络安全和隔离
  • 使用专用终结点时,Azure Databricks 工作区禁用公共网络访问
  • Azure Databricks 群集启用了磁盘加密来保护静态数据
  • Azure Databricks 工作区使用客户管理的密钥进行增强加密控制
  • Azure Databricks 工作区启用了诊断日志记录,以便监视和合规。
  • Azure Databricks 工作区仅在批准的地理区域中部署,以满足合规性要求
  • 企业级工作负载使用 Azure Databricks 高级层,以增强的安全性和合规性功能
  • Azure Databricks 工作区启用了 Unity 目录以实现集中式数据管理

有关治理的详细信息,请查看 Azure Databricks 的 Azure Policy 内置定义 ,以及可能影响分析平台安全性的其他策略。

Azure 顾问建议

Azure 顾问是一名个性化的云顾问,可帮助你遵循最佳做法来优化 Azure 部署。

有关详细信息,请参阅 Azure 顾问

权衡

如果使用支柱清单中的方法,可能需要进行设计权衡。

分析性能和成本权衡

在性能和成本之间取得正确的平衡至关重要。 如果过度预配,则浪费钱:如果预配不足,工作负荷可能会降低或失败。 若要避免这两种情况,请测试不同的配置、使用性能基准、执行成本分析,以指导你的选择。

方案体系结构

演示关键建议的基础体系结构: 使用 Azure Databricks 进行流处理