管理 Azure Synapse Analytics 中的 Apache Spark 程式庫
連結庫提供可重複使用的程式代碼,您可能想要包含在 Azure Synapse Analytics 中 Apache Spark 的程式或專案中(Azure Synapse Spark)。
基於各種原因,您可能需要更新無伺服器 Apache Spark 集區環境。 例如,您可能會發現:
- 其中一個核心相依性發行了新版本。
- 您需要額外的套件來定型機器學習模型或準備數據。
- 有較佳的套件可供使用,而您不再需要較舊的套件。
- 您的小組已建置自定義套件,您需要在 Apache Spark 集區中取得。
若要讓第三方或本機建置的程式代碼可供您的應用程式使用,請將連結庫安裝到其中一個無伺服器 Apache Spark 集區或筆記本工作階段。
套件層級概觀
Azure Synapse Analytics 上已安裝三個層級的套件:
預設值:預設套件包含完整的 Anaconda 安裝,以及額外的常用連結庫。 如需連結庫的完整清單,請參閱 Apache Spark 版本支援。
啟動Spark實例時,會自動包含這些連結庫。 您可以在其他層級新增更多套件。
Spark 集區:所有執行中的成品都可以在Spark集區層級使用套件。 例如,您可以將筆記本和 Spark 作業定義附加至對應的 Spark 集區。
您可以上傳自定義連結庫和您想要在 Azure Synapse Analytics 工作區中使用的特定開放原始碼連結庫版本。 工作區套件可以安裝在Spark集區中。
會話:會話層級安裝會建立特定筆記本會話的環境。 會話層級連結庫的變更不會在會話之間保存。
注意
- 集區層級連結庫管理可能需要時間,視套件大小和所需相依性的複雜度而定,更新時間上限設定為 50 分鐘。 如果集區層級連結庫管理作業超過 50 分鐘的上限,系統就會自動取消。 我們建議針對實驗性與快速反覆案例安裝會話層級。
- 集區層級連結庫管理會產生穩定的相依性,以執行 Notebook 和 Spark 作業定義。 強烈建議您將連結庫安裝到 Spark 集區,以供管線執行使用。
- 會話層級連結庫管理可協助您快速反覆執行或處理連結庫的頻繁變更。 不過,不會承諾會話層級安裝的穩定性。 此外,管線執行中會停用 %pip 和 %conda 等內嵌命令。 建議在開發階段期間管理筆記本會話中的連結庫。
管理工作區套件
當小組開發自定義應用程式或模型時,您可能會開發各種程式代碼成品,例如 .whl、 .jar或 .tar.gz 檔案來封裝程序代碼。
重要
- 只有 R 語言支援tar.gz。 請使用 .whl 作為 Python 自定義套件。
在 Azure Synapse 中,工作區套件可以是自定義或私人 .whl 或 .jar 檔案。 您可以將這些套件上傳至您的工作區,稍後將它們指派給特定的無伺服器 Apache Spark 集區。 指派這些工作區套件之後,它們會自動安裝在所有Spark集區會話上。
若要深入瞭解如何管理工作區連結庫,請參閱 管理工作區套件。
管理集區套件
在某些情況下,您可能想要標準化 Apache Spark 集區上使用的套件。 如果您的小組中的多人通常會安裝相同的套件,此標準化就很有用。
藉由使用 Azure Synapse Analytics 的集區管理功能,您可以設定預設連結庫集,以安裝在無伺服器 Apache Spark 集區上。 這些連結庫會安裝在基底運行時間之上。
針對 Python 連結庫,Azure Synapse Spark 集區會使用 Conda 來安裝和管理 Python 套件相依性。 您可以藉由提供 requirements.txt 或 environment.yml 檔案來指定集區層級 Python 連結庫。 每次從該 Spark 集區建立 Spark 實例時,都會使用此環境組態檔。 您也可以將工作區套件附加至集區。
若要深入了解這些功能,請參閱 管理 Spark 集區套件。
重要
- 如果您要安裝的套件很大,或需要很長的時間才能安裝,它可能會影響Spark實例的啟動時間。
- 不支援 PySpark、Python、Scala/Java、.NET 或 Spark 版本。
管理已啟用 DEP 的 Azure Synapse Spark 集區的相依性
注意
啟用 DEP 的工作區不支援從公用存放庫安裝套件。 相反地,請將所有相依性上傳為工作區連結庫,並將其安裝到Spark集區。
如果您在識別必要的相依性時遇到問題,請遵循下列步驟:
執行下列腳本來設定與 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
執行下列腳本來識別必要的相依性。 腳本可用來傳遞您的 requirements.txt 檔案,其中包含您想要在Spark 3.1或Spark 3.2集區中安裝的所有套件和版本。 它會列印輸入連結庫需求的新轉輪檔案/相依性名稱。
# 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
命令來管理 Notebook 程式代碼資料格中的連結庫。重要
請勿使用
%%sh
搭配 pip 或 conda 來嘗試安裝連結庫。 行為 與 %pip 或 %conda 不同 。Scala/Java 工作階段套件:在工作階段開始時,提供使用 安裝.jar檔案
%%configure
清單。R 工作階段套件:在您的工作階段內,您可以使用 或
devtools
,在 Spark 集install.packages
區內的所有節點上安裝套件。
透過 Azure PowerShell Cmdlet 和 REST API 自動化連結庫管理程式
如果您的小組想要管理連結庫而不流覽套件管理 UI,您可以選擇透過 Azure PowerShell Cmdlet 或 Azure Synapse Analytics 的 REST API 來管理工作區套件和集區層級套件更新。
如需詳細資訊,請參閱下列文章: