De Livy-API gebruiken om Spark-sessietaken met gebruikersreferenties te verzenden en uit te voeren

Van toepassing op:✅ Fabric Data Engineering and Data Science

Met de Fabric Livy-API kunt u Spark-batch- en sessietaken rechtstreeks vanaf een externe client verzenden naar Fabric Spark-berekening, zonder de Fabric-portal te gebruiken. In dit artikel maakt u een Lakehouse, verifieert u met een Microsoft Entra token, detecteert u het Livy-API-eindpunt en verzendt en bewaakt u een Spark-sessietaak.

Vereiste voorwaarden

Een REST API-client kiezen

U kunt communiceren met de Livy-API vanaf elke client die HTTP-aanvragen ondersteunt, inclusief hulpprogramma's zoals curl of elke taal met een HTTP-bibliotheek. In de voorbeelden in dit artikel wordt Visual Studio Code gebruikt met Jupyter Notebooks, PySpark en de Microsoft Authentication Library (MSAL) voor Python.

De Livy-API-aanvragen autoriseren

Als u de Livy-API wilt gebruiken, moet u uw aanvragen verifiëren met behulp van Microsoft Entra ID. Er zijn twee autorisatiemethoden beschikbaar:

  • Entra SPN-token (service-principal): de toepassing authenticeert zichzelf met behulp van inloggegevens zoals een clientgeheim of certificaat. Deze methode is geschikt voor geautomatiseerde processen en achtergrondservices waarbij geen tussenkomst van de gebruiker is vereist.

  • Entra-app-token (gedelegeerd): de toepassing handelt namens een aangemelde gebruiker. Deze methode is geschikt wanneer u wilt dat de toepassing toegang heeft tot resources met de machtigingen van de geverifieerde gebruiker.

Kies de autorisatiemethode die het beste bij uw scenario past en volg de bijbehorende sectie hieronder.

De Livy-API-aanvragen autoriseren met een Microsoft Entra SPN-token

Als u wilt werken met Fabric API's, waaronder de Livy-API, moet u eerst een Microsoft Entra toepassing maken en een geheim maken en dat geheim gebruiken in uw code. Uw toepassing moet voldoende zijn geregistreerd en geconfigureerd om API-aanroepen uit te voeren op Fabric. Zie voor meer informatie Toevoegen en toepassingsreferenties beheren in Microsoft Entra ID

  1. Nadat u de app-registratie hebt gemaakt, maakt u een clientgeheim.

    Schermafbeelding met Microsoft Entra app-registratie en het toevoegen van een clientgeheim.

  2. Wanneer u het cliëntgeheim aanmaakt, zorg ervoor dat u de waarde kopieert. Je hebt dit later in de code nodig en het geheim kan niet opnieuw worden gezien. U hebt ook de applicatie-id (client) en de directory (tenant-id) nodig naast het geheim in uw code.

  3. Voeg vervolgens de service-principal toe aan uw werkruimte.

    Schermopname met instellingen voor het beheren van toegang tot Lakehouse.

  4. Zoek de Microsoft Entra-toepassing met behulp van de applicatie (client) ID of -naam, voeg deze toe aan de werkruimte en zorg ervoor dat de service-principal de Contributor-rechten heeft.

    Schermopname waarin de nieuwe SPN-service-principal wordt toegevoegd aan de werkruimte.

De Livy-API-aanvragen autoriseren met een Entra-app-token

Als u wilt werken met Fabric API's, waaronder de Livy-API, moet u eerst een Microsoft Entra-toepassing maken en een token verkrijgen. Uw toepassing moet voldoende zijn geregistreerd en geconfigureerd om API-aanroepen uit te voeren op Fabric. Zie Register van een toepassing met de Microsoft identity platform voor meer informatie.

De volgende Microsoft Entra bereikmachtigingen zijn vereist voor het uitvoeren van Livy-API-taken:

Schermafbeelding met Livy API-machtigingen in de Microsoft Entra admin center.

Vereiste bereiken

Scope Beschrijving
Lakehouse.Execute.All Voer bewerkingen uit in Fabric lakehouses.
Lakehouse.Read.All Lees de metagegevens van Lakehouse.
Code.AccessFabric.All Hiermee kunt u toegangstokens voor Microsoft Fabric verkrijgen. Vereist voor alle Livy-API-bewerkingen.
Code.AccessStorage.All Hiermee kunt u toegangstokens krijgen tot OneLake en Azure-opslag. Vereist voor het lezen en schrijven van gegevens in lakehouses.

Optionele code.* bereiken

Voeg deze scopes alleen toe als uw Spark-taken tijdens de uitvoering toegang nodig hebben tot de bijbehorende Azure services.

Scope Beschrijving Wanneer gebruiken
Code.AccessAzureKeyvault.All Hiermee kunt u toegangstokens ophalen voor Azure Key Vault. Met uw Spark-code worden geheimen, sleutels of certificaten opgehaald uit Azure Key Vault.
Code.AccessAzureDataLake.All Hiermee kunt u toegangstokens ophalen voor Azure Data Lake Storage Gen1. Uw Spark-code leest van of schrijft naar Azure Data Lake Storage Gen1 accounts.
Code.AccessAzureDataExplorer.All Hiermee kunt u toegangstokens ophalen voor Azure Data Explorer (Kusto). Uw Spark-code voert query's uit of neemt gegevens op van/naar Azure Data Explorer clusters.
Code.AccessSQL.All Hiermee kunt u toegangstokens ophalen voor Azure SQL. Uw Spark-code moet verbinding maken met Azure SQL databases.

Wanneer u uw applicatie registreert, hebt u zowel de applicatie-id (client) als de directory-id (tenant) nodig.

Schermopname met het overzicht van de Livy-API-app in de Microsoft Entra admin center.

De geverifieerde gebruiker die de Livy-API aanroept, moet lid zijn van de werkruimte waarin zowel de API als de gegevensbronitems zich bevinden met de rol Inzender. Zie Gebruikers toegang geven tot werkruimten voor meer informatie.

Inzicht in Code.* scopes voor de Livy API

Wanneer uw Spark-taken worden uitgevoerd via de Livy-API, bepalen de Code.* toegangsrechten tot welke externe services de Spark Runtime namens de geverifieerde gebruiker toegang kan krijgen. Er zijn twee vereist; de rest is optioneel, afhankelijk van uw workload.

Vereiste code.* bereiken

Scope Beschrijving
Code.AccessFabric.All Hiermee kunt u toegangstokens voor Microsoft Fabric verkrijgen. Vereist voor alle Livy-API-bewerkingen.
Code.AccessStorage.All Hiermee kunt u toegangstokens krijgen tot OneLake en Azure-opslag. Vereist voor het lezen en schrijven van gegevens in lakehouses.

Optionele code.* bereiken

Voeg deze scopes alleen toe als uw Spark-taken tijdens de uitvoering toegang nodig hebben tot de bijbehorende Azure services.

Scope Beschrijving Wanneer gebruiken
Code.AccessAzureKeyvault.All Hiermee kunt u toegangstokens ophalen voor Azure Key Vault. Met uw Spark-code worden geheimen, sleutels of certificaten opgehaald uit Azure Key Vault.
Code.AccessAzureDataLake.All Hiermee kunt u toegangstokens ophalen voor Azure Data Lake Storage Gen1. Uw Spark-code leest van of schrijft naar Azure Data Lake Storage Gen1 accounts.
Code.AccessAzureDataExplorer.All Hiermee kunt u toegangstokens ophalen voor Azure Data Explorer (Kusto). Uw Spark-code voert query's uit of neemt gegevens op van/naar Azure Data Explorer clusters.
Code.AccessSQL.All Hiermee kunt u toegangstokens ophalen voor Azure SQL. Uw Spark-code moet verbinding maken met Azure SQL databases.

Notitie

De Lakehouse.Execute.All en Lakehouse.Read.All bereiken zijn vereist, maar maken geen deel uit van de Code.* familie. Ze verlenen respectievelijk machtigingen voor het uitvoeren van bewerkingen in en het lezen van metagegevens uit Fabric lakehouses.

Het Fabric Livy-API-eindpunt detecteren

Een Lakehouse-artefact is vereist voor toegang tot het Livy-eindpunt. Zodra het Lakehouse is gemaakt, kan het Livy-API-eindpunt zich in het instellingenvenster bevinden.

Schermopname van Livy API-eindpunten in Lakehouse-instellingen.

Het eindpunt van de Livy-API volgt dit patroon:

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

De URL wordt voorzien van <sessies> of <batches>, afhankelijk van uw keuze.

De Livy API Swagger-bestanden downloaden

De volledige swagger-bestanden voor de Livy-API zijn hier beschikbaar.

Sessies met hoge mate van gelijktijdigheid

Ondersteuning voor hoge gelijktijdigheid (HC) maakt gelijktijdige Spark-uitvoering mogelijk doordat clients meerdere onafhankelijke uitvoeringscontexten kunnen verkrijgen, ook wel gelijktijdigheidssessies genoemd.

Elke HC-sessie vertegenwoordigt een logische uitvoeringscontext die is toegewezen aan een Spark REPL (Read-Eval-Print Loop). Onder verschillende HC-sessies ingediende Spark-instructies kunnen gelijktijdig worden uitgevoerd.

Dit maakt het volgende mogelijk:

  • Parallelle uitvoering in HC-sessies
  • Voorspelbaar resourcegebruik
  • Isolatie tussen gelijktijdige verzoeken
  • Lagere overhead vergeleken met het maken van een nieuwe sessie per aanvraag

Als u één sessie gebruikt voor alle aanvragen, worden instructies opeenvolgend uitgevoerd. Het maken van een nieuwe sessie voor elke aanvraag introduceert onnodige overhead en onderbezetting van resources.

Notitie

HC-sessieverwerving is niet idempotent. Meerdere acquisitieaanvragen met dezelfde sessionTag leveren verschillende HC session IDs, ook al worden ze ondersteund door dezelfde onderliggende Livy-sessie.

Zie Get gestart met de Livy-API voor Fabric High Concurrency Sessions voor stapsgewijze instructies met voorbeeldcode. Zie High gelijktijdigheidsondersteuning in de Fabric Livy-API voor een conceptueel overzicht.

Een Livy-API-taak indienen

Nu de installatie van de Livy-API is voltooid, kunt u ervoor kiezen om batch- of sessietaken in te dienen.

Integratie met Fabric-omgevingen

Deze Livy API-sessie wordt standaard uitgevoerd op basis van de standaardstartgroep voor de werkruimte. U kunt ook Fabric Omgevingen Maken, configureren en gebruiken van een omgeving in Microsoft Fabric om de Spark-pool aan te passen die door de Livy API-sessie voor deze Spark-taken wordt gebruikt.

Als u een Fabric Environment in een Livy Spark-sessie wilt gebruiken, werk het json-bestand bij om deze payload op te nemen.

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

Als u een Fabric Environment in een Livy Spark-batchsessie wilt gebruiken, werkt u de json-nettolading bij zoals hier wordt weergegeven:

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

De aanvraaggeschiedenis bewaken

U kunt de Monitoring Hub gebruiken om uw eerdere Livy API-inzendingen te bekijken en fouten in inzendingen op te sporen.

Schermopname van eerdere Livy API-inzendingen in de Monitoring Hub.