共用方式為


對程式庫安裝錯誤進行疑難排解

若要讓您的應用程式可以使用協力廠商或本機建置的程式碼,您可以將程式庫安裝到其中一個無伺服器 Apache Spark 集區中。 當集區啟動時,會從 PyPi 下載 requirements.txt 檔案中列出的套件。 每次從該 Spark 集區建立 Spark 執行個體時,就會使用此需求檔案。 一旦為 Spark 集區安裝程式庫之後,該程式庫就可用於使用相同集區的所有工作階段。

在某些情況下,您可能會發現程式庫未出現在 Apache Spark 集區中。 當提供的 requirements.txt 或指定的程式庫中發生錯誤時,通常會發生這種情況。 當程式庫安裝過程中發生錯誤時,Apache Spark 集區會還原回 Synapse 基底執行階段中指定的程式庫。

本文件的目標是要提供常見問題,並協助您偵錯程式庫安裝錯誤。

強制更新您的 Apache Spark 集區

當您更新 Apache Spark 集區中的程式庫時,將會在集區重新啟動之後取得這些變更。 如果您有作用中作業,這些作業會繼續在原始版本的 Spark 集區中執行。

您可以選取 [Force new settings] \(強制使用新設定\) 選項來強制套用變更。 此設定會結束所選 Spark 集區的所有目前工作階段。 工作階段結束之後,您必須等候集區重新啟動。

新增 Python 程式庫

追蹤安裝進度

每次使用一組新的程式庫更新集區時,都會啟動系統保留的 Spark 作業。 此 Spark 作業有助於監視程式庫安裝的狀態。 如果因為程式庫衝突或其他問題而導致安裝失敗,Spark 集區會還原為其先前或預設狀態。

此外,使用者也可以檢查安裝記錄來找出相依性衝突,或查看在集區更新期間安裝了哪些程式庫。

若要檢視這些記錄:

  1. 瀏覽至 [監視] 索引標籤中的 Spark 應用程式清單。
  2. 選取對應至集區更新的系統 Spark 應用程式作業。 這些系統作業在 SystemReservedJob-LibraryManagement 標題下執行。 螢幕擷取畫面,其中醒目提示系統保留程式庫工作。
  3. 切換以檢視 [驅動程式] 和 [stdout] 記錄。
  4. 在結果中,您會看到與套件安裝相關的記錄。 螢幕擷取畫面,其中醒目提示系統保留程式庫工作結果。

追蹤安裝失敗

在某些狀況下,使用者也可以檢查 Spark 歷程記錄伺服器中可用的完整安裝記錄,識別複雜的相依性衝突。 您可以截斷透過 Spark UI 提供的記錄並透過 Spark 歷程記錄伺服器存取完整的安裝記錄,這在複雜程式庫安裝案例中很實用。

若要檢視完整的安裝記錄:

  1. 瀏覽至 [監視] 索引標籤中的 Spark 應用程式清單。
  2. 選取對應至失敗集區更新的系統 Spark 應用程式作業。 這些系統作業在 SystemReservedJob-LibraryManagement 標題下執行。 螢幕擷取畫面醒目提示系統保留程式庫作業失敗。
  3. 選取醒目提示的 [Spark 歷程記錄伺服器] 選項,這會在新的索引標籤中開啟 Spark 歷程記錄伺服器詳細資料頁面。螢幕擷取畫面醒目提示系統保留程式庫作業失敗的詳細資料。
  4. 在此頁面中,您將看到 2 次嘗試,選取 [嘗試 1],如下所示。 螢幕擷取畫面醒目提示 Spark 歷程記錄伺服器頁面中系統保留程式庫作業失敗的執行程式詳細資料。
  5. 在 Spark 歷程記錄伺服器頁面的頂端瀏覽列中,切換至 [執行程式] 索引標籤。螢幕擷取畫面醒目提示 Spark 歷程記錄伺服器頁面中系統保留程式庫作業失敗的作業詳細資料。
  6. 下載 stdoutstderr 記錄檔,以存取完整的管理輸出和錯誤記錄。 螢幕擷取畫面醒目提示系統保留程式庫作業失敗的 Spark 歷程記錄伺服器頁面。

驗證您的權限

若要安裝和更新程式庫,您必須具有連結至 Azure Synapse Analytics 工作區的主要 Azure Data Lake Storage Gen2 儲存體帳戶儲存體 Blob 資料參與者儲存體 Blob 資料擁有者權限。

若要驗證您具有這些權限,您可以執行下列程式碼:

from pyspark.sql.types import StructType,StructField, StringType, IntegerType
data2 = [("James","Smith","Joe","4355","M",3000),
    ("Michael","Rose","Edward","40288","F",4000)
  ]

schema = StructType([ \
    StructField("firstname",StringType(),True), \
    StructField("middlename",StringType(),True), \
    StructField("lastname",StringType(),True), \
    StructField("id", StringType(), True), \
    StructField("gender", StringType(), True), \
    StructField("salary", IntegerType(), True) \
  ])
 
df = spark.createDataFrame(data=data2,schema=schema)

df.write.csv("abfss://<<ENTER NAME OF FILE SYSTEM>>@<<ENTER NAME OF PRIMARY STORAGE ACCOUNT>>.dfs.core.windows.net/validate_permissions.csv")

如果您收到錯誤,您可能缺少必要的權限。 若要了解如何取得所需的權限,請瀏覽此文件:指派儲存體 Blob 資料參與者或儲存體 Blob 資料擁有者權限

此外,如果您正在執行管線,則工作區 MSI 也必須具有儲存體 Blob 資料擁有者或儲存體 Blob 資料參與者權限。 若要了解如何將此權限授與您的工作區識別,請瀏覽:將權限授與工作區受控識別

檢查環境設定檔

環境設定檔可用來升級 Conda 環境。 環境規格列出 Python 集區管理可接受的檔案格式。

請務必注意下列限制:

  • 需求檔案的內容不能包含額外的空白行或字元。
  • Synapse 執行階段包含一組已預先安裝到每個無伺服器 Apache Spark 集區的程式庫。 您無法移除或解除安裝已預先安裝到基底執行階段的套件。
  • 不支援改變 PySpark、Python、Scala/JAVA、.NET 或 Spark 版本。
  • Python 工作階段範圍的程式庫只接受具有 YML 副檔名的檔案。

驗證 Wheel 檔案

Synapse 無伺服器 Apache Spark 集區是以 Linux 發行版本為基礎。 直接從 PyPI 下載並安裝 Wheel 檔案時,請務必選取 Linux 上建置的版本,並在與 Spark 集區相同的 Python 版本上執行。

重要

可在工作階段之間新增或修改自訂套件。 不過,您必須等候集區和工作階段重新啟動,才能看到更新的套件。

檢查相依性衝突

一般來說,Python 相依性解析可能很難管理。 為了協助在本機偵錯相依性衝突,您可以根據 Synapse 執行階段建立自己的虛擬環境,並驗證您的變更。

若要重新建立環境並驗證您的更新:

  1. 下載範本以在本機重新建立 Synapse 執行階段。 範本與實際的 Synapse 環境之間可能有些微差異。

  2. 使用下列指示建立虛擬環境。 此環境可讓您使用指定的程式庫清單建立隔離的 Python 安裝。

    conda myenv create -f environment.yml
    conda activate myenv
    
  3. 使用 pip install -r <provide your req.txt file> 來更新您指定套件的虛擬環境。 如果安裝導致錯誤,則在 Synapse 基底執行階段中預先安裝的項目與所提供需求檔案中指定的項目之間可能發生衝突。 必須解決這些相依性衝突,才能在無伺服器 Apache Spark 集區中取得更新的程式庫。

重要

同時使用 pip 和 conda 時,可能會發生這些問題。 結合 pip 與 conda 時,最好遵循這些建議的最佳做法

下一步