Risolvere gli errori di installazione della libreria

Per rendere il codice di terze parti o compilato localmente disponibile per le applicazioni, è possibile installare una libreria in uno dei pool di Apache Spark serverless. I pacchetti elencati nel file requirements.txt vengono scaricati da PyPi all'avvio del pool. Questo file di requisiti viene usato ogni volta che viene creata un'istanza di Spark da tale pool di Spark. Dopo aver installato una libreria per un pool di Spark, è disponibile per tutte le sessioni che usano lo stesso pool.

In alcuni casi, è possibile che una libreria non venga visualizzata nel pool di Apache Spark. Questo caso si verifica spesso in presenza di un errore nelle librerie requirements.txt o nelle librerie specificate. Quando si verifica un errore nel processo di installazione della libreria, il pool di Apache Spark ripristina le librerie specificate nel runtime di base di Synapse.

L'obiettivo di questo documento è fornire problemi comuni e facilitare il debug degli errori di installazione della libreria.

Forzare l'aggiornamento del pool di Apache Spark

Quando si aggiornano le librerie nel pool di Apache Spark, queste modifiche verranno recuperate dopo il riavvio del pool. Se sono presenti processi attivi, questi continueranno a essere eseguiti nella versione originale del pool di Spark.

È possibile forzare l'applicazione delle modifiche selezionando l'opzione Forza nuove impostazioni. Questa impostazione terminerà tutte le sessioni correnti per il pool di Spark selezionato. Al termine delle sessioni, è necessario attendere il riavvio del pool.

Add Python libraries

Tenere traccia dello stato dell'installazione

Viene avviato un processo Spark riservato per il sistema ogni volta che un pool viene aggiornato con un nuovo set di librerie. Questo processo Spark consente di monitorare lo stato dell'installazione della libreria. Se l'installazione non riesce a causa di conflitti della libreria o altri problemi, il pool di Spark ripristina lo stato precedente o predefinito.

Inoltre, gli utenti possono anche esaminare i log di installazione per identificare i conflitti di dipendenza o vedere quali librerie sono state installate durante l'aggiornamento del pool.

Per visualizzare questi log:

  1. Passare all'elenco delle applicazioni Spark nella scheda Monitoraggio.
  2. Selezionare il processo dell'applicazione Spark di sistema corrispondente all'aggiornamento del pool. Questi processi di sistema vengono eseguiti con il titolo SystemReservedJob-LibraryManagement. Screenshot that highlights system reserved library job.
  3. Passare alla vista dei log driver e stdout.
  4. Nei risultati verranno visualizzati i log correlati all'installazione dei pacchetti. Screenshot that highlights system reserved library job results.

Tenere traccia degli errori di installazione

In alcuni casi, gli utenti possono anche esaminare i log di installazione completi disponibili nel Server cronologia Spark per identificare conflitti di dipendenza complessi. I log disponibili tramite l'interfaccia utente di Spark potrebbero essere troncati e l'accesso ai log di installazione completi tramite il Server cronologia Spark sarebbe utile in scenari di installazione di librerie complessi.

Per visualizzare i log di installazione completi:

  1. Passare all'elenco delle applicazioni Spark nella scheda Monitoraggio.
  2. Selezionare il processo dell'applicazione Spark di sistema corrispondente all'aggiornamento del pool non riuscito. Questi processi di sistema vengono eseguiti con il titolo SystemReservedJob-LibraryManagement. Screenshot that highlights the failed system reserved library job.
  3. Selezionare l'opzione Server cronologia Spark evidenziata per aprire la pagina dei dettagli del Server cronologia Spark in una nuova scheda. Screenshot that highlights the details of the failed system reserved library job.
  4. In questa pagina verranno visualizzati 2 tentativi, selezionare Tentativo 1 come illustrato di seguito. Screenshot that highlights the executor details in the spark history server page for the failed system reserved library job.
  5. Nella barra di spostamento superiore della pagina del Server cronologia Spark passare alla scheda Executor. Screenshot that highlights the job details in the spark history server page for the failed system reserved library job.
  6. Scaricare i file di log stdout e stderr per accedere all'output completo della gestione delle librerie e ai log degli errori. Screenshot that highlights the spark history server page for the failed system reserved library job.

Convalidare le autorizzazioni

Per installare e aggiornare le librerie, è necessario disporre delle autorizzazioni Collaboratore ai dati del BLOB di archiviazione o Proprietario dei dati del BLOB di archiviazione nell'account di archiviazione Azure Data Lake Storage Gen2 primario collegato all'area di lavoro di Azure Synapse Analytics.

Per verificare di avere queste autorizzazioni, è possibile eseguire il codice seguente:

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")

Se viene visualizzato un errore, è probabile che manchino le autorizzazioni necessarie. Per informazioni su come ottenere le autorizzazioni necessarie, visitare questo documento: Assegnare autorizzazioni di Collaboratore ai dati del BLOB di archiviazione o Proprietario dei dati del BLOB di archiviazione.

Inoltre, se si esegue una pipeline, l'identità del servizio gestito dell'area di lavoro deve disporre anche delle autorizzazioni di Proprietario dei dati del BLOB di archiviazione o Collaboratore ai dati del BLOB di archiviazione. Per informazioni su come concedere all'identità dell'area di lavoro questa autorizzazione, vedere: Concedere le autorizzazioni all'identità gestita dell'area di lavoro.

Verificare il file di configurazione dell'ambiente

È possibile usare un file di configurazione dell'ambiente per aggiornare l'ambiente Conda. Questo formato di file accettabile per la gestione del pool Python è elencato come Specifiche dell'ambiente.

Si tengano in considerazione le restrizioni seguenti:

  • Il contenuto del file dei requisiti non deve includere righe o caratteri vuoti aggiuntivi.
  • Il runtime di Synapse include un set di librerie preinstallate in ogni pool di Apache Spark serverless. I pacchetti preinstallati nel runtime di base non possono essere rimossi o disinstallati.
  • La modifica della versione di PySpark, Python, Scala/Java, .NET o Spark non è supportata.
  • Le librerie con ambito sessione Python accettano solo file con estensione YML.

Convalidare i file wheel

I pool di Apache Spark serverless di Synapse si basano sulla distribuzione Linux. Quando si scaricano e si installano file Wheel direttamente da PyPI, assicurarsi di selezionare la versione compilata in Linux ed eseguita nella stessa versione di Python del pool di Spark.

Importante

È possibile aggiungere o modificare pacchetti personalizzati tra le sessioni. Tuttavia, sarà necessario attendere il riavvio del pool e della sessione per visualizzare il pacchetto aggiornato.

Verificare la presenza di conflitti tra dipendenze

In generale, la risoluzione delle dipendenze Python può essere difficile da gestire. Per eseguire il debug dei conflitti di dipendenza in locale, è possibile creare un ambiente virtuale personalizzato in base al runtime di Synapse e convalidare le modifiche.

Per ricreare l'ambiente e convalidare gli aggiornamenti:

  1. Scaricare il modello per ricreare il runtime di Synapse in locale. Potrebbero esserci lievi differenze tra il modello e l'ambiente Synapse effettivo.

  2. Creare un ambiente virtuale usando le istruzioni seguenti. Questo ambiente consente di creare un'installazione di Python isolata con l'elenco specificato di librerie.

    conda myenv create -f environment.yml
    conda activate myenv
    
  3. Usare pip install -r <provide your req.txt file> per aggiornare l'ambiente virtuale con i pacchetti specificati. Se l'installazione genera un errore, potrebbe verificarsi un conflitto tra ciò che è preinstallato nel runtime di base di Synapse e ciò che viene specificato nel file dei requisiti specificato. È necessario risolvere questi conflitti di dipendenza per ottenere le librerie aggiornate nel pool di Apache Spark serverless.

Importante

Possono insorgere problemi quando si usano pip e conda insieme. Quando si combinano pip e conda, è bene seguire queste procedure consigliate.

Passaggi successivi