Condividi tramite


Usare l'API Livy per inviare ed eseguire processi di sessione Spark con credenziali utente

Si applica a:✅ Fabric Data Engineering and Data Science

L'API Fabric Livy consente di inviare processi batch e sessioni Spark da un client remoto direttamente al compute Spark di Fabric, senza utilizzare il portale di Fabric. In questo articolo si crea un lakehouse, si esegue l'autenticazione con un token Microsoft Entra, si individua l'endpoint dell'API Livy e si invia e si monitora un processo di sessione Spark.

Prerequisiti

Scegliere un client API REST

È possibile interagire con l'API Livy da qualsiasi client che supporta le richieste HTTP, inclusi strumenti come curl o qualsiasi linguaggio con una libreria HTTP. Gli esempi in questo articolo usano Visual Studio Code con Jupyter Notebook, PySpark e Libreria di Autenticazione Microsoft (MSAL) per Python.

Come autorizzare le richieste dell'API Livy

Per usare l'API Livy, è necessario autenticare le richieste usando Microsoft Entra ID. Sono disponibili due metodi di autorizzazione:

  • Entra SPN Token (principal del servizio): l'applicazione esegue l'autenticazione come sé stessa usando credenziali come un segreto del client o un certificato. Questo metodo è adatto per processi automatizzati e servizi in background in cui non è necessaria alcuna interazione dell'utente.

  • Entra app token (Delegato): l'applicazione agisce per conto di un utente registrato. Questo metodo è adatto quando si vuole che l'applicazione acceda alle risorse con le autorizzazioni dell'utente autenticato.

Scegliere il metodo di autorizzazione più adatto allo scenario e seguire la sezione corrispondente di seguito.

Come autorizzare le richieste dell'API Livy con un token SPN Microsoft Entra

Per usare Fabric API, inclusa l'API Livy, è prima necessario creare un'applicazione Microsoft Entra e creare un segreto e usarlo nel codice. L'applicazione deve essere registrata e configurata in modo adeguato per eseguire chiamate API su Fabric. Per altre informazioni, vedere Aggiungere e gestire le credenziali dell'applicazione in Microsoft Entra ID

  1. Dopo aver creato la registrazione dell'app, crea un "client secret".

    Screenshot che mostra la registrazione dell'app in Microsoft Entra e l'aggiunta di un segreto cliente.

  2. Quando si crea il segreto del client, assicurarsi di copiare il valore. Questa operazione è necessaria più avanti nel codice e il segreto non può essere più visualizzato. Sono necessari anche l'ID applicazione (client) e l'ID della directory (tenant) oltre al segreto nel codice sorgente.

  3. Successivamente, aggiungere l'entità servizio alla tua area di lavoro.

    Screenshot che mostra le opzioni di gestione dell'accesso nelle impostazioni del Lakehouse.

  4. Cercare l'applicazione Microsoft Entra usando l'ID applicazione (client) o il nome, aggiungerla all'area di lavoro e assicurarsi che il principal del servizio disponga delle autorizzazioni del ruolo di Collaboratore.

    Screenshot che mostra l'aggiunta della nuova entità di servizio SPN all'area di lavoro.

Come autorizzare le richieste api Livy con un token dell'app Entra

Per usare Fabric API, inclusa l'API Livy, è prima necessario creare un'applicazione Microsoft Entra e ottenere un token. L'applicazione deve essere registrata e configurata in modo adeguato per eseguire chiamate API su Fabric. Per ulteriori informazioni, vedere Registrare un'applicazione con la piattaforma di identità Microsoft.

Per eseguire i processi dell'API Livy sono necessarie le autorizzazioni di ambito Microsoft Entra seguenti:

Screenshot che mostra le autorizzazioni api Livy nel Interfaccia di amministrazione di Microsoft Entra.

Ambiti necessari

Ambito Descrizione
Lakehouse.Execute.All Eseguire operazioni nei Fabric lakehouses.
Lakehouse.Read.All Leggi i metadati del lakehouse.
Code.AccessFabric.All Consente di ottenere i token di accesso per Microsoft Fabric. Obbligatorio per tutte le operazioni dell'API Livy.
Code.AccessStorage.All Consente di ottenere i token di accesso per OneLake e per l'archiviazione di Azure. Obbligatorio per la lettura e la scrittura di dati nei lakehouse.

Ambiti facoltativi code.*

Aggiungere questi ambiti solo se i processi Spark devono accedere ai servizi di Azure corrispondenti in fase di esecuzione.

Ambito Descrizione Quando utilizzare
Code.AccessAzureKeyvault.All Consente di ottenere token di accesso per Azure Key Vault. Il codice Spark recupera segreti, chiavi o certificati da Azure Key Vault.
Code.AccessAzureDataLake.All Consente di ottenere token di accesso per Azure Data Lake Storage Gen1. Il codice Spark legge da o scrive su account Azure Data Lake Storage Gen1.
Code.AccessAzureDataExplorer.All Consente di ottenere token di accesso per Esplora dati di Azure (Kusto). Il codice Spark esegue query o inserisce dati da e verso cluster Esplora dati di Azure.
Code.AccessSQL.All Consente di ottenere token di accesso per Azure SQL. Il codice Spark deve connettersi ai database Azure SQL.

Quando si registra l'applicazione, sono necessari sia l'ID applicazione (client) che l'ID directory (tenant).

Screenshot che mostra la panoramica dell'app per le API Livy in Interfaccia di amministrazione di Microsoft Entra.

L'utente autenticato che chiama l'API Livy deve essere un membro dell'area di lavoro in cui si trovano sia l'API che gli elementi dell'origine dati con un ruolo Collaboratore. Per altre informazioni, vedere Concedere agli utenti l'accesso alle aree di lavoro.

Informazioni sugli ambiti Code.* per l'API Livy

Quando i processi Spark vengono eseguiti tramite l'API Livy, gli Code.* ambiti controllano quali servizi esterni il runtime Spark può accedere per conto dell'utente autenticato. Due sono obbligatori; il resto è facoltativo a seconda del carico di lavoro.

Ambiti di Codice obbligatorio.*

Ambito Descrizione
Code.AccessFabric.All Consente di ottenere i token di accesso per Microsoft Fabric. Obbligatorio per tutte le operazioni dell'API Livy.
Code.AccessStorage.All Consente di ottenere i token di accesso per OneLake e per l'archiviazione di Azure. Obbligatorio per la lettura e la scrittura di dati nei lakehouse.

Ambiti facoltativi code.*

Aggiungere questi ambiti solo se i processi Spark devono accedere ai servizi di Azure corrispondenti in fase di esecuzione.

Ambito Descrizione Quando utilizzare
Code.AccessAzureKeyvault.All Consente di ottenere token di accesso per Azure Key Vault. Il codice Spark recupera segreti, chiavi o certificati da Azure Key Vault.
Code.AccessAzureDataLake.All Consente di ottenere token di accesso per Azure Data Lake Storage Gen1. Il codice Spark legge da o scrive su account Azure Data Lake Storage Gen1.
Code.AccessAzureDataExplorer.All Consente di ottenere token di accesso per Esplora dati di Azure (Kusto). Il codice Spark esegue query o inserisce dati da e verso cluster Esplora dati di Azure.
Code.AccessSQL.All Consente di ottenere token di accesso per Azure SQL. Il codice Spark deve connettersi ai database Azure SQL.

Nota

Gli ambiti Lakehouse.Execute.All e Lakehouse.Read.All sono anch'essi obbligatori, ma non fanno parte della famiglia Code.*. Concedono l'autorizzazione per eseguire operazioni nei lakehouse di Fabric e leggere rispettivamente i metadati.

Come individuare l'endpoint dell'API Livy Fabric

Per accedere all'endpoint Livy è necessario un artefatto Lakehouse. Dopo aver creato Lakehouse, l'endpoint dell'API Livy può trovarsi all'interno del pannello delle impostazioni.

Screenshot che mostra gli endpoint dell'API Livy nelle impostazioni di Lakehouse.

L'endpoint dell'API Livy seguirà questo modello:

https://api.fabric.microsoft.com/v1/workspaces/><ws_id>/lakehouses/<lakehouse_id>/livyapi/versions/2023-12-01/

L'URL viene aggiunta con <sessioni> o <batch> a seconda di ciò che si sceglie.

Scaricare i file Swagger dell'API Livy

I file Swagger completi per l'API Livy sono disponibili qui.

Sessioni di concorrenza elevata

Il supporto di concorrenza elevata (HC) consente l'esecuzione simultanea di Spark consentendo ai client di acquisire più contesti di esecuzione indipendenti, denominati sessioni di concorrenza elevata.

Ogni sessione HC rappresenta un contesto di esecuzione logica mappato a un ciclo REPL di Spark (Read-Eval-Print Loop). Le istruzioni Spark inviate in sessioni HC diverse possono essere eseguite simultaneamente.

Questo consente:

  • Esecuzione parallela tra sessioni HC
  • Utilizzo prevedibile delle risorse
  • Isolamento tra richieste simultanee
  • Sovraccarico inferiore rispetto alla creazione di una nuova sessione per richiesta

L'uso di una singola sessione per tutte le richieste causa l'esecuzione sequenziale delle istruzioni. La creazione di una nuova sessione per ogni richiesta introduce un sovraccarico non necessario e una sottoutilizzazione delle risorse.

Nota

L'acquisizione della sessione HC non è idempotente. Più richieste di acquisizione con lo stesso sessionTag restituiscono diversi ID sessione HC, anche quando sono basate sulla stessa sessione Livy sottostante.

Per una procedura dettagliata con codice di esempio, vedere Introduzione all'API Livy per Fabric sessioni di concorrenza elevata. Per una panoramica concettuale, vedere Supporto della concorrenza elevata nell'API Fabric Livy.

Inviare processi api Livy

Ora che la configurazione dell'API Livy è stata completata, è possibile scegliere di inviare processi batch o di sessione.

Integrazione con ambienti Fabric

Per impostazione predefinita, questa sessione dell'API Livy viene eseguita nel pool di avvio predefinito per l'area di lavoro. In alternativa, è possibile usare Fabric Ambienti Creare, configurare e usare un ambiente in Microsoft Fabric per personalizzare il pool di Spark usato dalla sessione api Livy per questi processi Spark.

Per usare un ambiente Fabric in una sessione di Livy Spark, aggiornare il codice JSON per includere questo payload.

create_livy_session = requests.post(livy_base_url, headers = headers, json={
    "conf" : {
        "spark.fabric.environmentDetails" : "{\"id\" : \""EnvironmentID""}"}
    }
)

Per usare un ambiente Fabric in una sessione batch livy Spark, aggiornare il payload json come illustrato di seguito:

payload_data = {
"name":"livybatchdemo_with"+ newlakehouseName,
"file":"abfss://YourABFSPathToYourPayload.py", 
"conf": {
    "spark.targetLakehouse": "Fabric_LakehouseID",
    "spark.fabric.environmentDetails" : "{\"id\" : \""EnvironmentID"\"}"  # Replace "EnvironmentID" with your environment ID, or remove this line to use starter pools instead of an environment
    }
}

Come monitorare la cronologia delle richieste

È possibile usare l'hub di monitoraggio per visualizzare gli invii precedenti dell'API Livy ed eseguire il debug di eventuali errori di invio.

Screenshot che mostra gli invii precedenti dell'API Livy nell'hub di monitoraggio.