Azure Synapse 运行时

Azure Synapse 中的 Apache Spark 池使用运行时将基本组件版本(例如 Azure Synapse 优化、包和连接器)与特定的 Apache Spark 版本绑定在一起。 每个运行时都会定期升级,以包含新的改进、功能和补丁。 在创建无服务器 Apache Spark 池时,选择相应的 Apache Spark 版本。 基于此,池将随关联的运行时组件和包一起预安装。

这些运行时具有以下优点:

  • 会话启动时间更快
  • 测试了与特定 Apache Spark 版本的兼容性
  • 可访问热门的兼容连接器和开源包

受支持的 Azure Synapse 运行时版本

提示

强烈建议主动将工作负载升级到更新正式发布版本的运行时,即为适用于 Apache Spark 3.4 的 Azure Synapse 运行时 (GA)。 请参阅 Apache Spark 迁移指南

下表列出了受支持的 Azure Synapse 运行时版本的运行时名称、Apache Spark 版本和发布日期。

运行时名称 发布日期 发布阶段 支持结束公告日期 支持结束生效日期
适用于 Apache Spark 3.4 的 Azure Synapse 运行时 2023 年 11 月 21 日 GA(截至 2024 年 4 月 8 日) 2025 年第 2 季度 2026 年第 1 季度
适用于 Apache Spark 3.3 的 Azure Synapse 运行时 2022 年 11 月 17 日 宣布终止支持 2024 年 7 月 12 日 2025 年 3 月 31 日
适用于 Apache Spark 3.2 的 Azure Synapse 运行时 2022 年 7 月 8 日 已弃用并将很快禁用 2023 年 7 月 8 日 2024 年 7 月 8 日
适用于 Apache Spark 3.1 的 Azure Synapse 运行时 2021 年 5 月 26 日 已弃用并将很快禁用 2023 年 1 月 26 日 2024 年 1 月 26 日
适用于 Apache Spark 2.4 的 Azure Synapse 运行时 2020 年 12 月 15 日 已弃用并将很快禁用 2022 年 7 月 29 日 2023 年 9 月 29 日

运行时发布说明

有关 Apache Spark 生命周期和支持策略的完整运行时,请参阅适用于 Apache Spark 生命周期和可支持性的 Synapse 运行时

运行时修补

适用于 Apache Spark 修补程序的 Azure Synapse 运行时每月推出,其中包含 Apache Spark 核心引擎、语言环境、连接器和库的 bug、功能和安全修补程序。

注意

  • 维护更新将自动应用于给定无服务器 Apache Spark 池的新会话。
  • 使用新的运行时版本时,应该测试并验证应用程序是否正常运行。

重要

Log4j 1.2.x 安全修补程序

此处所述,开源 Log4j 库版本 1.2.x 有几个已知的 CVE(常见漏洞和风险)。

针对所有 Synapse Spark Pool 运行时,我们修补了 Log4j 1.2.17 JAR 以缓解以下 CVE:CVE-2019-1751、CVE-2020-9488、CVE-2021-4104、CVE-2022-23302、CVE-2022- 2330,CVE-2022-23307

应用的补丁的工作原理是删除会引发漏洞的以下文件:

  • org/apache/log4j/net/SocketServer.class
  • org/apache/log4j/net/SMTPAppender.class
  • org/apache/log4j/net/JMSAppender.class
  • org/apache/log4j/net/JMSSink.class
  • org/apache/log4j/jdbc/JDBCAppender.class
  • org/apache/log4j/chainsaw/*

虽然上述类未在 Synapse 的默认 Log4j 配置中使用,但某些用户应用程序仍可能依赖于它。 如果应用程序需要使用这些类,请使用“库管理”将 Log4j 的安全版本添加到 Spark 池。 请勿使用 Log4j 版本 1.2.17,它会重新引入漏洞。

修补程序策略因运行时生命周期阶段而异:

  • 正式发布 (GA) 运行时:不接收主要版本(即 3.x -> 4.x)升级。 只要没有弃用或回归影响,就会升级次要版本(即 3.x -> 3.y)。

  • 预览运行时:除非绝对必要,否则不会升级主要版本。 次要版本 (3.x -> 3.y) 将升级,以将最新功能添加到运行时。

  • 长期支持 (LTS) 运行时仅使用安全修补程序进行修补。

  • 宣布支持结束的运行时将不会有 bug 和功能修复。 安全修补程序会基于风险评估进行向后移植。

Apache Spark 版本之间的迁移 - 支持

本指南为希望将 Apache Spark 的 Azure Synapse 运行时工作负载从版本 2.4、3.1、3.2 或 3.3 升级到最新 GA 版本(如 3.4)的用户提供了结构化方法。 升级到最新版本后,用户将能够受益于性能增强、新增功能和改进的安全措施。 请务必注意,由于不兼容或弃用的功能,过渡到更高版本可能需要调整现有 Spark 代码。

步骤 1:评估计划

  • 评估兼容性:从查看 Apache Spark 迁移指南开始,以确定当前 Spark 版本(2.4、3.1、3.2 或 3.3)与目标版本(例如 3.4)之间的任何潜在不兼容、弃用的功能和新的 API。
  • 分析代码库:仔细检查 Spark 代码以确定是否使用了已弃用或修改的 API。 特别注意 SQL 查询和用户定义的函数 (UDF),这可能会受到升级的影响。

步骤 2:创建新的用于测试的 Spark 池

  • 创建新池:在 Azure Synapse 中,转到“Spark 池”部分并设置新的 Spark 池。 选择目标 Spark 版本(例如 3.4),并根据性能要求对其进行配置。
  • 配置 Spark 池配置:确保更新或替换新 Spark 池中的所有库和依赖项,以便与 Spark 3.4 兼容。

步骤 3:迁移和测试代码

  • 迁移代码:更新代码,以符合 Apache Spark 3.4 中的新 API 或修订的 API。 这涉及到解决弃用的功能,以及采用官方 Apache Spark 文档中详述的新功能。
  • 在开发环境中测试:在 Azure Synapse 的开发环境中测试更新的代码,而不是在本地测试。 此步骤对于在迁移到生产环境之前识别和修复任何问题至关重要。
  • 部署和监视:在开发环境中进行彻底测试和验证后,将应用程序部署到新的 Spark 3.4 池。 请务必监视应用程序是否存在任何意外行为。 利用 Azure Synapse 中提供的监视工具跟踪 Spark 应用程序的性能。

问:在从 2.4 迁移到 3.X 时应执行哪些步骤?

答:请参阅 Apache Spark 迁移指南

问:在 Spark 池具有附加库的情况下,我在尝试使用 PowerShell cmdlet 对其运行时进行升级的过程中遇到错误

答:如果在 Synapse 工作区中安装了自定义库,请不要使用 PowerShell cmdlet。 而应执行以下步骤:

  1. 从头开始重新创建 Spark 池 3.3。
  2. 将当前 Spark 池 3.3 降级到 3.1,移除附加的任何包,然后重新升级到 3.3。

问题: 为什么在不重新创建新的 Spark 池的情况下无法升级到 3.4?

答案:不允许从 UX 执行此操作,客户可以使用 Azure PowerShell 更新 Spark 版本。 请使用“ForceApplySetting”,以便停用任何现有群集(具有旧版本)。

示例查询:

$_target_work_space = @("workspace1", "workspace2")

Get-AzSynapseWorkspace |
    ForEach-Object {
        if ($_target_work_space -contains $_.Name) {
            $_workspace_name = $_.Name
            Write-Host "Updating workspace: $($_workspace_name)"
            Get-AzSynapseSparkPool -WorkspaceName $_workspace_name |
            ForEach-Object {
                Write-Host "Updating Spark pool: $($_.Name)"
                Write-Host "Current Spark version: $($_.SparkVersion)"
        
                Update-AzSynapseSparkPool -WorkspaceName $_workspace_name -Name $_.Name -SparkVersion 3.4 -ForceApplySetting
              }
        }
    }