在 Azure Synapse Analytics 中管理 Apache Spark 使用的库

库中有你可能希望包含在 Azure Synapse Analytics 中的 Apache Spark (Azure Synapse Spark) 的程序或项目中的可重用代码。

由于各种原因,可能需要更新无服务器 Apache Spark 池环境。 例如,你可能发现:

  • 其中一个核心依赖项发布了新版本。
  • 需要额外的包来训练机器学习模型或准备数据。
  • 有更好的包可用,并且你不再需要之前的包。
  • 团队已构建了一个需要在 Apache Spark 池中使用的自定义包。

为使第三方或本地生成的代码可用于你的应用程序,可向你的其中一个无服务器 Apache Spark 池或笔记本会话安装一个库。

包级别概述

Azure Synapse Analytics 上安装了 3 个级别的包:

  • 默认:默认包中有完整的 Anaconda 安装和额外的常用库。 有关库的完整列表,请参阅 Apache Spark 版本支持

    Spark 实例启动时,会自动包含这些库。 可在其他级别添加更多包。

  • Spark 池:所有正在运行的项目都可使用在 Spark 池级别的包。 例如,可以将笔记本和 Spark 作业定义附加到相应的 Spark 池。

    可以上传要在 Azure Synapse Analytics 工作区中使用的自定义库和特定版本的开源库。 工作区包可以安装在 Spark 池中。

  • 会话:会话级安装会为特定的笔记本会话创建一个环境。 会话级别库的更改在会话之间不会保留。

注意

  • 池级库管理可能需要一段时间,具体取决于包的大小和所需依赖项的复杂性,最大更新时间已设置为 50 分钟。 如果池级库管理作业超过 50 分钟的上限,则会自动取消该作业。 建议对实验性和快速迭代方案进行会话级安装。
  • 池级库管理将生成用于运行笔记本和 Spark 作业定义的稳定依赖项。 对于管道运行,强烈建议将库安装到 Spark 池。
  • 会话级别库管理可帮助你快速迭代或处理库的频繁更改。 但是,不保证会话级别安装的稳定性。 此外,在管道运行中会禁用 %pip 和 %conda 等内联命令。 建议在开发阶段管理笔记本会话中的库。

管理工作区包

当团队开发自定义应用程序或模型时,你可能会开发各种代码项目(例如 .whl.jar.tar.gz 文件)来打包代码。

重要

  • tar.gz 仅支持 R 语言。 请使用 .whl 作为 Python 自定义包。

在 Azure Synapse 中,工作区包可以是自定义包,也可以是专用的 .whl 或 .jar 文件。 可以先将这些包上传到自己的工作区,以后再将其分配到特定的无服务器 Apache Spark 池。 分配这些工作区包后,它们会自动安装在所有 Spark 池会话上。

若要详细了解如何管理工作区库,请参阅管理工作区包

管理池包

在某些情况下,可能想要对 Apache Spark 池上使用的包进行标准化。 如果团队中的多名用户统一安装了相同的包,则这种标准化会很有用。

使用 Azure Synapse Analytics 的池管理功能时,可配置要在无服务器 Apache Spark 池上安装的默认库集。 这些库都是基于基本运行时来安装的。

对于 Python 库,Azure Synapse Spark 池使用 Conda 来安装和管理 Python 包依赖项。 可以通过提供 requirements.txtenvironment.yml 文件来指定池级 Python 库。 每当通过该 Spark 池创建 Spark 实例时,都会用到这个环境配置文件。 还可以将工作区包附加到池。

若要详细了解这些功能,请参阅管理 Spark 池包

重要

  • 如果要安装的包很大,或者安装需要很长时间,可能会影响 Spark 实例的启动时间。
  • 不支持更改 PySpark、Python、Scala/Java、.NET 或 Spark 版本。

管理已启用 DEP 的 Azure Synapse Spark 池的依赖项

注意

已启用 DEP 的工作区中不支持从公共存储库安装包。 转而,请将所有依赖项作为工作区库进行上传,并将其安装到 Spark 池。

如果在识别所需的依赖项时遇到问题,请执行以下步骤:

  1. 运行以下脚本,设置与 Azure Synapse Spark 环境相同的本地 Python 环境。 此脚本需要一个 YAML 文件,该文件需包含 Azure Synapse Spark 的默认 Python 环境中包含的所有库的列表。 可在特定运行时版本的文档中找到此 YAML 文件,例如 Apache Spark 3.2(已宣布终止支持)Apache Spark 3.3 (GA)

       # One-time Azure Synapse Python setup
       wget Synapse-Python38-CPU.yml
       sudo bash Miniforge3-Linux-x86_64.sh -b -p /usr/lib/miniforge3
       export PATH="/usr/lib/miniforge3/bin:$PATH"
       sudo apt-get -yq install gcc g++
       conda env create -n synapse-env -f Synapse-Python38-CPU.yml 
       source activate synapse-env
    
  2. 运行以下脚本来标识所需的依赖项。 该脚本可用于传递 requirements.txt 文件,该文件包含要安装在 Spark 3.1 或 Spark 3.2 池中的所有包和版本。 它将输出新的 wheel 文件/依赖项的名称来满足输入库要求。

       # Command to list wheels needed for your input libraries.
       # This command will list only new dependencies that are
       # not already part of the built-in Azure Synapse environment.
       pip install -r <input-user-req.txt> > pip_output.txt
       cat pip_output.txt | grep "Using cached *"
    

    注意

    默认情况下,此脚本将仅列出 Spark 池中尚不存在的依赖项。

管理会话范围内的包

在你进行交互式数据分析或机器学习时,你可能会尝试使用更新版本的包,或者可能需要使用 Apache Spark 池中当前不可用的包。 你可使用会话范围的包来添加、管理和更新会话依赖项,而无需更新池配置。

使用会话范围的包时,用户可以在其会话开始时定义包依赖项。 安装会话范围的包时,只有当前会话可以访问指定的包。 因此,这些会话范围的包不会影响使用同一 Apache Spark 池的其他会话或作业。 此外,这些库将基于基本运行时和池级别库进行安装。

若要详细了解如何管理会话范围的包,请参阅以下文章:

  • Python 会话包:在会话开始时提供 Conda environment.yml 文件,以便从常用存储库中安装其他 Python 包。 或者,可以使用 %pip 和 %conda 命令来管理笔记本代码单元格中的库。

  • Scala/Java 会话包:在会话开始时提供 .jar 文件列表,以使用 %%configure 进行安装。

  • R 会话包:在会话中,可以使用 install.packagesdevtools 跨 Spark 池中的所有节点安装包。

通过 Azure PowerShell cmdlet 和 REST API 自动执行库管理过程

如果你的团队想要在不访问包管理 UI 的情况下管理库,可选择通过 Azure PowerShell cmdlet 或用于 Azure Synapse Analytics 的 REST API 来管理工作区包和池级包更新。

有关详细信息,请参阅以下文章:

后续步骤