Brug Livy-API'en til at sende og udføre Spark-sessionsjob med brugerlegitimationsoplysninger

Gælder for:✅ Fabric Data Engineering og Data Science

Fabric Livy API'en lader dig indsende Spark batch- og sessionjobs fra en fjernklient direkte til Fabric Spark compute uden at bruge Fabric-portalen. I denne artikel opretter du et Lakehouse, autentificerer med et Microsoft Entra-token, opdager Livy API-endpointet og indsender samt overvåger et Spark-sessionsjob.

Forudsætninger

Vælg en REST API-klient

Du kan interagere med Livy API'et fra enhver klient, der understøtter HTTP-anmodninger, inklusive værktøjer som curl eller ethvert sprog med et HTTP-bibliotek. Eksemplerne i denne artikel bruger Visual Studio Code med Jupyter Notebooks, PySpark og Microsoft Authentication Library (MSAL) for Python.

Sådan autoriserer du Livy API-anmodningerne

For at bruge Livy API'en skal du autentificere dine anmodninger med Microsoft Entra ID. Der findes to autorisationsmetoder:

  • Entra SPN Token (Service Principal): Applikationen autentificerer sig selv ved hjælp af legitimationsoplysninger som en klienthemmelighed eller certifikat. Denne metode er velegnet til automatiserede processer og baggrundstjenester, hvor der ikke kræves brugerinteraktion.

  • Entra app-token (Delegeret): Applikationen handler på vegne af en indlogget bruger. Denne metode er egnet, når du ønsker, at applikationen skal tilgå ressourcer med tilladelserne fra den autentificerede bruger.

Vælg den autorisationsmetode, der passer bedst til din situation, og følg det tilsvarende afsnit nedenfor.

Sådan autoriserer du Livy API-anmodninger med en Microsoft Entra SPN Token

For at arbejde med Fabric API'er, inklusive Livy API'en, skal du først oprette en Microsoft Entra-applikation og oprette en hemmelighed og bruge denne hemmelighed i din kode. Din applikation skal være registreret og konfigureret tilstrækkeligt til at udføre API-kald mod Fabric. For mere information, se Tilføj og administrer ansøgningsoplysninger i Microsoft Entra ID

  1. Når du har oprettet appregistreringen, skal du oprette en klienthemmelighed.

    Skærmbillede, der viser Microsoft Entra app-registrering og tilføjelse af en klient-secret.

  2. Når du opretter klienthemmeligheden, skal du sørge for at kopiere værdien. Du skal bruge dette senere i koden, og hemmeligheden kan ikke ses igen. Du skal også bruge applikations-ID (klient-ID) og katalog (lejer-ID) ud over hemmeligheden i din kode.

  3. Dernæst tilføjer du serviceprincippet til dit arbejdsområde.

    Skærmbillede, der viser indstillinger for Administrer adgang Lakehouse.

  4. Søg efter Microsoft Entra-applikationen ved at bruge applikations-ID (klient) ID eller navn, tilføj den til arbejdsområdet, og sørg for, at serviceprincipalen har bidragyderrettigheder.

    Skærmbillede, der viser tilføjelse af den nye SPN-tjenesteprincipal til arbejdsområdet.

Sådan godkender du Livy API-anmodninger med et Entra-apptoken

For at arbejde med Fabric API'er, inklusive Livy API'en, skal du først oprette en Microsoft Entra-applikation og skaffe et token. Din applikation skal være registreret og konfigureret tilstrækkeligt til at udføre API-kald mod Fabric. For mere information, se Registrer en applikation hos Microsoft identity platform.

Følgende Microsoft Entra-scope-tilladelser kræves for at udføre Livy API-jobs:

Skærmbillede, der viser Livy API-tilladelser i Microsoft Entra admin center.

Påkrævede teleskoper

Omfanget Beskrivelse
Lakehouse.Execute.All Udfør operationer i Fabric søhuse.
Lakehouse.Read.All Læs lakehouse-metadata.
Code.AccessFabric.All Gør det muligt at få adgangstokens til Microsoft Fabric. Påkrævet for alle Livy API-operationer.
Code.AccessStorage.All Gør det muligt at få adgangstokene til OneLake og Azure-lagring. Påkrævet for at læse og skrive data i søhuse.

Valgfrie Code.* scopes

Tilføj kun disse scopes, hvis dine Spark-jobs har brug for adgang til de tilsvarende Azure-tjenester under runtime.

Omfanget Beskrivelse Hvornår skal du bruge?
Code.AccessAzureKeyvault.All Gør det muligt at få adgangstokene til Azure Key Vault. Din Spark-kode henter hemmeligheder, nøgler eller certifikater fra Azure Key Vault.
Code.AccessAzureDataLake.All Gør det muligt at få adgangstoks til Azure Data Lake Storage Gen1. Din Spark-kode læser fra eller skriver til Azure Data Lake Storage Gen1-konti.
Code.AccessAzureDataExplorer.All Gør det muligt at få adgangstokene til Azure Data Explorer (Kusto). Din Spark-kode forespørger eller indlæser data til/fra Azure Data Explorer-klynger.
Code.AccessSQL.All Gør det muligt at få adgangstokene til Azure SQL. Din Spark-kode skal kunne forbindes til Azure SQL-databaser.

Når du registrerer din applikation, skal du bruge både applikations-ID-et (klient-ID'et og Directory-(lejer-)ID'et.

Skærmbillede, der viser oversigt over Livy API-appen i Microsoft Entra admin center.

Den godkendte bruger, der kalder Livy-API'en, skal være medlem af arbejdsområdet, hvor både API- og datakildeelementer er placeret med rollen Bidragyder. Du kan få flere oplysninger under Giv brugere adgang til arbejdsområder.

Forståelse af Code.* omfang for Livy API'en

Når dine Spark-jobs kører via Livy API'en, styrer scopes, Code.* hvilke eksterne tjenester Spark Runtime kan få adgang til på vegne af den autentificerede bruger. To er påkrævet; Resten er valgfrie afhængigt af din arbejdsbyrde.

Påkrævede Code.* scopes

Omfanget Beskrivelse
Code.AccessFabric.All Gør det muligt at få adgangstokens til Microsoft Fabric. Påkrævet for alle Livy API-operationer.
Code.AccessStorage.All Gør det muligt at få adgangstokene til OneLake og Azure-lagring. Påkrævet for at læse og skrive data i søhuse.

Valgfrie Code.* scopes

Tilføj kun disse scopes, hvis dine Spark-jobs har brug for adgang til de tilsvarende Azure-tjenester under runtime.

Omfanget Beskrivelse Hvornår skal du bruge?
Code.AccessAzureKeyvault.All Gør det muligt at få adgangstokene til Azure Key Vault. Din Spark-kode henter hemmeligheder, nøgler eller certifikater fra Azure Key Vault.
Code.AccessAzureDataLake.All Gør det muligt at få adgangstoks til Azure Data Lake Storage Gen1. Din Spark-kode læser fra eller skriver til Azure Data Lake Storage Gen1-konti.
Code.AccessAzureDataExplorer.All Gør det muligt at få adgangstokene til Azure Data Explorer (Kusto). Din Spark-kode forespørger eller indlæser data til/fra Azure Data Explorer-klynger.
Code.AccessSQL.All Gør det muligt at få adgangstokene til Azure SQL. Din Spark-kode skal kunne forbindes til Azure SQL-databaser.

Bemærk

Og Lakehouse.Execute.AllLakehouse.Read.All skoperne er også påkrævet, men er ikke en del af Code.* familien. De giver tilladelse til at udføre operationer i og læse metadata fra Fabric søhuse.

Sådan opdager du Fabric Livy API-endpointet

Der kræves en Lakehouse-artefakt for at få adgang til Livy-slutpunktet. Når Lakehouse er oprettet, kan Livy API-slutpunktet placeres i indstillingspanelet.

Skærmbillede, der viser Livy API-slutpunkter i indstillingerne for Lakehouse.

Slutpunktet for Livy-API'en følger dette mønster:

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

URL-adressen tilføjes med enten <sessioner> eller <batches> , afhængigt af hvad du vælger.

Download Livy API Swagger-filerne

De fulde swagger-filer til Livy-API'en er tilgængelige her.

Sessioner med høj samtidighed

Høj samtidighed (HC) understøttelse muliggør samtidig Spark-udførelse ved at lade klienter opnå flere uafhængige eksekveringskontekster, kaldet højsamtidighedssessioner.

Hver HC-session repræsenterer en logisk eksekveringskontekst, der kortlægges til en Spark REPL (Read-Eval-Print Loop). Spark-udsagn indsendt under forskellige HC-sessioner kan udføres samtidigt.

Dette muliggør:

  • Parallel udførelse på tværs af HC-sessioner
  • Forudsigelig ressourceforbrug
  • Isolation mellem samtidige forespørgsler
  • Lavere overhead sammenlignet med at oprette en ny session pr. anmodning

Brug af en enkelt session for alle forespørgsler får sætninger til at køre sekventielt. Oprettelse af en ny session for hver anmodning medfører unødvendig overhead og ressourceunderudnyttelse.

Bemærk

HC-sessionsoptagelse er ikke idempotent. Flere acquire-forespørgsler med samme sessionTag giver forskellige HC-sessions-ID'er, selv når de understøttes af den samme underliggende Livy-session.

For en trin-for-trin gennemgang med eksempelkode, se Kom i gang med Livy API for Fabric High Concurrency Sessions. For et konceptuelt overblik, se Høj samtidighedsunderstøttelse i Fabric Livy API.

Send et Livy API-job

Nu, hvor konfigurationen af Livy-API'en er fuldført, kan du vælge at sende enten batch- eller sessionsjob.

Integration med Fabric-miljøer

Denne Livy API-session kører som standard i forhold til standardstartgruppen for arbejdsområdet. Alternativt kan du bruge Fabric Environments Create, configur og bruge et miljø i Microsoft Fabric til at tilpasse Spark-poolen, som Livy API-sessionen bruger til disse Spark-jobs.

For at bruge et Fabric Environment i en Livy Spark-session, opdater json'en til at inkludere denne payload.

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

For at bruge et Fabric Environment i en Livy Spark batch-session, opdater json-payloaden som vist her:

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
    }
}

Sådan overvåger du anmodningsoversigten

Du kan bruge Overvågningshub til at se dine tidligere Livy API-indsendelser og foretage fejlfinding af eventuelle indsendelsesfejl.

Skærmbillede, der viser tidligere Livy API-indsendelser i overvågningshubben.