Använd Livy-API:et för att skicka och köra Spark-sessionsjobb med användarautentiseringsuppgifter

Gäller för:✅ Fabric Data Engineering och Data Science

Med Fabric Livy API kan du skicka Spark-batch- och sessionsjobb från en fjärrklient direkt till Fabric Spark-beräkning, utan att använda Fabric-portalen. I den här artikeln skapar du en Lakehouse, autentiserar med en Microsoft Entra token, identifierar Livy API-slutpunkten och skickar och övervakar ett Spark-sessionsjobb.

Förutsättningar

Välj en REST API-klient

Du kan interagera med Livy-API:et från alla klienter som stöder HTTP-begäranden, inklusive verktyg som curl eller valfritt språk med ett HTTP-bibliotek. Exemplen i den här artikeln använder Visual Studio Code med Jupyter Notebooks, PySpark och Microsoft Authentication Library (MSAL) för Python.

Auktorisera Api-begäranden för Livy

Om du vill använda Livy-API:et måste du autentisera dina begäranden med hjälp av Microsoft Entra ID. Det finns två tillgängliga auktoriseringsmetoder:

  • Entra SPN-token (tjänstens huvudnamn): Programmet autentiserar som sig självt med autentiseringsuppgifter, till exempel en klienthemlighet eller ett certifikat. Den här metoden är lämplig för automatiserade processer och bakgrundstjänster där ingen användarinteraktion krävs.

  • Entra-apptoken (delegerad): Programmet agerar på uppdrag av en inloggad användare. Den här metoden är lämplig när du vill att programmet ska få åtkomst till resurser med behörigheter för den autentiserade användaren.

Välj den auktoriseringsmetod som passar bäst för ditt scenario och följ motsvarande avsnitt nedan.

Auktorisera Livy API-begäranden med en Microsoft Entra SPN-token

Om du vill arbeta med Fabric API:er, inklusive Livy-API:et, måste du först skapa ett Microsoft Entra program och skapa en hemlighet och använda den hemligheten i koden. Ditt program måste vara registrerat och konfigurerat på lämpligt sätt för att utföra API-anrop mot Fabric. Mer information finns i Lägg till och hantera programautentiseringsuppgifter i Microsoft Entra ID

  1. När du har skapat appregistreringen skapar du en klienthemlighet.

    Screenshot som visar Microsoft Entra appregistrering och lägger till en klienthemlighet.

  2. När du skapar en klienthemlighet ska du se till att kopiera värdet. Du behöver detta senare i koden, och hemligheten kan inte visas igen. Du behöver även program-ID:t (klient-ID) och katalog-ID:t (hyresgäst-ID) utöver hemligheten i din kod.

  3. Lägg sedan till tjänstens huvudnamn på din arbetsyta.

    Skärmbild som visar Inställningar för Hantera åtkomstalternativ för Lakehouse.

  4. Sök efter Microsoft Entra-programmet med hjälp av klientprogram-ID:t eller namnet, lägg till det till arbetsytan och kontrollera att tjänstens tjänstehuvudnamn har Contributor-behörigheter.

    Skärmbild som visar hur du lägger till det nya SPN-tjänstens huvudnamn på arbetsytan.

Auktorisera Livy API-begäranden med en Entra-apptoken

Om du vill arbeta med Fabric API:er inklusive Livy-API:et måste du först skapa ett Microsoft Entra-program och hämta en token. Ditt program måste vara registrerat och konfigurerat på lämpligt sätt för att utföra API-anrop mot Fabric. Mer information finns i Registrera ett program med Microsoft identity platform.

Följande Microsoft Entra omfångsbehörigheter krävs för att köra Livy API-jobb:

Screenshot som visar Livy API-behörigheter i Microsoft Entra admin center.

Nödvändiga omfång

Scope Beskrivning
Lakehouse.Execute.All Utför operationer i Fabric lakehouses.
Lakehouse.Read.All Läsa metadata för lakehouse.
Code.AccessFabric.All Tillåter hämtning av åtkomsttoken till Microsoft Fabric. Krävs för alla Livy API-åtgärder.
Code.AccessStorage.All Tillåter att åtkomsttoken hämtas till OneLake och Azure lagring. Krävs för att läsa och skriva data i lakehouses.

Valfri kod.* omfång

Lägg bara till dessa omfång om dina Spark-jobb behöver komma åt motsvarande Azure tjänster vid körning.

Scope Beskrivning När det bör användas
Code.AccessAzureKeyvault.All Tillåter att åtkomsttoken hämtas till Azure Key Vault. Spark-koden hämtar hemligheter, nycklar eller certifikat från Azure Key Vault.
Code.AccessAzureDataLake.All Tillåter att åtkomsttoken hämtas till Azure Data Lake Storage Gen1. Spark-koden läser från eller skriver till Azure Data Lake Storage Gen1 konton.
Code.AccessAzureDataExplorer.All Tillåter att åtkomsttoken hämtas till Azure Data Explorer (Kusto). Spark-koden frågar eller matar in data till/från Azure Data Explorer kluster.
Code.AccessSQL.All Tillåter att åtkomsttoken hämtas till Azure SQL. Spark-koden måste ansluta till Azure SQL databaser.

När du registrerar ditt program behöver du både klientprogram-ID och klientorganisationens katalog-ID.

Skärmbild som visar Översikt över Livy API-appen i Microsoft Entra admin center.

Den autentiserade användaren som anropar Livy-API:et måste vara medlem i arbetsytan där både API:et och datakällobjekten finns med rollen Medverkande. Mer information finns i Ge användare åtkomst till arbetsytor.

Förstå Code.* omfånget för Livy-API:n

När dina Spark-jobb körs via Livy-API:et styr omfången Code.* vilka externa tjänster Spark Runtime kan komma åt för den autentiserade användarens räkning. Två krävs; resten är valfria beroende på din arbetsbelastning.

Nödvändig kod.* omfång

Scope Beskrivning
Code.AccessFabric.All Tillåter hämtning av åtkomsttoken till Microsoft Fabric. Krävs för alla Livy API-åtgärder.
Code.AccessStorage.All Tillåter att åtkomsttoken hämtas till OneLake och Azure lagring. Krävs för att läsa och skriva data i lakehouses.

Valfri kod.* omfång

Lägg bara till dessa omfång om dina Spark-jobb behöver komma åt motsvarande Azure tjänster vid körning.

Scope Beskrivning När det bör användas
Code.AccessAzureKeyvault.All Tillåter att åtkomsttoken hämtas till Azure Key Vault. Spark-koden hämtar hemligheter, nycklar eller certifikat från Azure Key Vault.
Code.AccessAzureDataLake.All Tillåter att åtkomsttoken hämtas till Azure Data Lake Storage Gen1. Spark-koden läser från eller skriver till Azure Data Lake Storage Gen1 konton.
Code.AccessAzureDataExplorer.All Tillåter att åtkomsttoken hämtas till Azure Data Explorer (Kusto). Spark-koden frågar eller matar in data till/från Azure Data Explorer kluster.
Code.AccessSQL.All Tillåter att åtkomsttoken hämtas till Azure SQL. Spark-koden måste ansluta till Azure SQL databaser.

Kommentar

Omfången Lakehouse.Execute.All och Lakehouse.Read.All krävs också men ingår inte i Code.* familjen. De ger behörighet att köra åtgärder i och läsa metadata från Fabric lakehouses respektive.

Så här identifierar du Fabric Livy API-slutpunkt

En Lakehouse-artefakt krävs för att få åtkomst till Livy-slutpunkten. När Lakehouse har skapats kan Livy API-slutpunkten finnas i inställningspanelen.

Skärmbild som visar Livy API-slutpunkter i Lakehouse-inställningar.

Slutpunkten för Livy-API:et skulle följa det här mönstret:

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

URL:en läggs till med antingen <sessioner> eller <batchar> beroende på vad du väljer.

Ladda ned Livy API Swagger-filerna

De fullständiga swagger-filerna för Livy-API:et finns här.

Sessioner med hög samtidighet

Stöd för hög samtidighet (HC) möjliggör samtidig Spark-körning genom att tillåta klienter att hämta flera oberoende körningskontexter, så kallade sessioner med hög samtidighet.

Varje HC-session representerar en logisk körningskontext som mappar till en Spark REPL (Read-Eval-Print Loop). Spark-instruktioner som skickas under olika HC-sessioner kan köras samtidigt.

På så sätt kan du:

  • Parallell körning över HC-sessioner
  • Förutsägbar resursanvändning
  • Isolering mellan samtidiga begäranden
  • Lägre omkostnader jämfört med att skapa en ny session per begäran

Om du använder en enda session för alla begäranden körs instruktioner sekventiellt. Att skapa en ny session för varje begäran medför onödiga omkostnader och resursunderutnyttjande.

Kommentar

Förvärv av HC-sessioner är inte idempotent. Flera förvärvningsförfrågningar med samma sessionTag returnerar olika HC-sessions-ID:er, även om de stöds av samma underliggande Livy-session.

En stegvis genomgång med exempelkod finns i Kom igång med Livy API för Fabric High Concurrency Sessions. En konceptöversikt finns i High concurrency support in the Fabric Livy API.

Skicka ett Livy API-jobb

Nu när installationen av Livy-API:et är klar kan du välja att skicka batch- eller sessionsjobb.

Integrering med Fabric miljöer

Som standard körs den här Livy API-sessionen mot standardstartpoolen för arbetsytan. Du kan också använda Fabric Miljöer Skapa, konfigurera och använda en miljö i Microsoft Fabric för att anpassa Spark-poolen som Livy API-sessionen använder för dessa Spark-jobb.

Om du vill använda en Fabric miljö i en Livy Spark-session uppdaterar du json så att den innehåller den här nyttolasten.

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

Om du vill använda en Fabric miljö i en Livy Spark-batchsession uppdaterar du json-nyttolasten enligt följande:

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å här övervakar du begärandehistoriken

Du kan använda Övervakningshubben för att se dina tidigare Livy API-inlämningar och felsöka eventuella inskickade fel.

Skärmbild som visar tidigare Livy API-inlämningar i övervakningshubben.