Del via


Bruke Livy-API-en til å sende inn og kjøre øktjobber

Merk

Livy API for Fabric Dataingeniør ing er i forhåndsvisning.

Gjelder for:✅ Dataingeniør ing og datavitenskap i Microsoft Fabric

Send inn Spark-satsvise jobber ved hjelp av Livy API for Fabric Dataingeniør ing.

Forutsetning

Livy-API-en definerer et enhetlig endepunkt for operasjoner. Erstatt plassholderne {Entra_TenantID}, {Entra_ClientID}, {Fabric_WorkspaceID} og {Fabric_LakehouseID} med de riktige verdiene når du følger eksemplene i denne artikkelen.

Konfigurer Visual Studio Code for Livy API-økten

  1. Velg Lakehouse-innstillinger i Fabric Lakehouse.

    Skjermbilde som viser Lakehouse-innstillinger.

  2. Gå til livy-endepunktinndelingen.

    skjermbilde som viser Lakehouse Livy-endepunkt og øktjobb tilkoblingsstreng.

  3. Kopier øktjobben tilkoblingsstreng (første røde boks i bildet) til koden.

  4. Gå til administrasjonssenteret for Microsoft Entra, og kopier både program-ID-en (klient)- og katalog-ID-en (leier) til koden.

    Skjermbilde som viser oversikt over Livy API-appen i administrasjonssenteret for Microsoft Entra.

Opprette en Livy API Spark-økt

  1. Opprett en .ipynb notatblokk i Visual Studio Code, og sett inn følgende kode.

    from msal import PublicClientApplication
    import requests
    import time
    
    tenant_id = "Entra_TenantID"
    client_id = "Entra_ClientID"
    
    workspace_id = "Fabric_WorkspaceID"
    lakehouse_id = "Fabric_LakehouseID"
    
    app = PublicClientApplication(
        client_id,
        authority="https://login.microsoftonline.com/43a26159-4e8e-442a-9f9c-cb7a13481d48"
    )
    
    result = None
    
    # If no cached tokens or user interaction needed, acquire tokens interactively
    if not result:
        result = app.acquire_token_interactive(scopes=["https://api.fabric.microsoft.com/Lakehouse.Execute.All", "https://api.fabric.microsoft.com/Lakehouse.Read.All", "https://api.fabric.microsoft.com/Item.ReadWrite.All", 
                                                   "https://api.fabric.microsoft.com/Workspace.ReadWrite.All", "https://api.fabric.microsoft.com/Code.AccessStorage.All", "https://api.fabric.microsoft.com/Code.AccessAzureKeyvault.All", 
                                                   "https://api.fabric.microsoft.com/Code.AccessAzureDataExplorer.All", "https://api.fabric.microsoft.com/Code.AccessAzureDataLake.All", "https://api.fabric.microsoft.com/Code.AccessFabric.All"])
    
    # Print the access token (you can use it to call APIs)
    if "access_token" in result:
        print(f"Access token: {result['access_token']}")
    else:
        print("Authentication failed or no access token obtained.")
    
    if "access_token" in result:
        access_token = result['access_token']
        api_base_url_mist='https://api.fabric.microsoft.com/v1'
        livy_base_url = api_base_url_mist + "/workspaces/"+workspace_id+"/lakehouses/"+lakehouse_id +"/livyApi/versions/2023-12-01/sessions"
        headers = {"Authorization": "Bearer " + access_token}
    
  2. Kjør notatblokkcellen, et popup-vindu skal vises i nettleseren, slik at du kan velge identiteten du vil logge på med.

    Skjermbilde som viser påloggingsskjermen til Microsoft Entra-appen.

  3. Når du har valgt identiteten du vil logge på med, blir du også bedt om å godkjenne API-tillatelsene for Microsoft Entra-appregistrering.

    Skjermbilde som viser API-tillatelser for Microsoft Entra-appen.

  4. Lukk nettleservinduet etter at godkjenningen er fullført.

    Skjermbilde som viser at godkjenningen er fullført.

  5. I Visual Studio Code skal du se Microsoft Entra-tokenet som returneres.

    Skjermbilde som viser Microsoft Entra-tokenet som returneres etter at du har kjørt cellen og logget på.

  6. Legg til en annen notatblokkcelle, og sett inn denne koden.

    create_livy_session = requests.post(livy_base_url, headers=headers, json={})
    print('The request to create the Livy session is submitted:' + str(create_livy_session.json()))
    
    livy_session_id = create_livy_session.json()['id']
    livy_session_url = livy_base_url + "/" + livy_session_id
    get_session_response = requests.get(livy_session_url, headers=headers)
    print(get_session_response.json())
    
  7. Kjør notatblokkcellen, du bør se én linje som skrives ut når Livy-økten opprettes.

    Skjermbilde som viser resultatene av den første kjøringen av notatblokkcellen.

  8. Du kan bekrefte at Livy-økten er opprettet ved hjelp av [Vis jobbene dine i overvåkingshuben](#View jobbene dine i overvåkingshuben).

Send inn en spark.sql-setning ved hjelp av Livy API Spark-økten

  1. Legg til en annen notatblokkcelle, og sett inn denne koden.

    # call get session API
    livy_session_id = create_livy_session.json()['id']
    livy_session_url = livy_base_url + "/" + livy_session_id
    get_session_response = requests.get(livy_session_url, headers=headers)
    print(get_session_response.json())
    while get_session_response.json()["state"] != "idle":
        time.sleep(5)
        get_session_response = requests.get(livy_session_url, headers=headers)
    
    execute_statement = livy_session_url + "/statements"
    payload_data =    {
        "code": "spark.sql(\"SELECT * FROM green_tripdata_2022_08 where fare_amount = 60\").show()",
        "kind": "spark"
        }
    execute_statement_response = requests.post(execute_statement, headers=headers, json=payload_data)
    print('the statement code is submitted as: ' + str(execute_statement_response.json()))
    
    statement_id = str(execute_statement_response.json()['id'])
    get_statement = livy_session_url+ "/statements/" + statement_id
    get_statement_response = requests.get(get_statement, headers=headers)
    
    while get_statement_response.json()["state"] != "available":
        # Sleep for 5 seconds before making the next request
        time.sleep(5)
        print('the statement code is submitted and running : ' + str(execute_statement_response.json()))
    
        # Make the next request
        get_statement_response = requests.get(get_statement, headers=headers)
    
    rst = get_statement_response.json()['output']['data']['text/plain']
    print(rst)
    
  2. Kjør notatblokkcellen, du bør se flere trinnvise linjer skrevet ut når jobben sendes inn, og resultatene returneres.

    Skjermbilde som viser resultatene av den første notatblokkcellen med Spark.sql kjøring.

Send inn en annen spark.sql-setning ved hjelp av Livy API Spark-økten

  1. Legg til en annen notatblokkcelle, og sett inn denne koden.

    # call get session API
    
    livy_session_id = create_livy_session.json()['id']
    livy_session_url = livy_base_url + "/" + livy_session_id
    get_session_response = requests.get(livy_session_url, headers=headers)
    print(get_session_response.json())
    while get_session_response.json()["state"] != "idle":
        time.sleep(5)
        get_session_response = requests.get(livy_session_url, headers=headers)
    
    execute_statement = livy_session_url + "/statements"
    payload_data = {
        "code": "spark.sql(\"SELECT * FROM green_tripdata_2022_08 where tip_amount = 10\").show()",
        "kind": "spark"
    }
    execute_statement_response = requests.post(execute_statement, headers=headers, json=payload_data)
    print('the statement code is submitted as: ' + str(execute_statement_response.json()))
    
    statement_id = str(execute_statement_response.json()['id'])
    get_statement = livy_session_url+ "/statements/" + statement_id
    get_statement_response = requests.get(get_statement, headers=headers)
    
    while get_statement_response.json()["state"] != "available":
    # Sleep for 5 seconds before making the next request
        time.sleep(5)
        print('the statement code is submitted and running : ' + str(execute_statement_response.json()))
    
        # Make the next request
        get_statement_response = requests.get(get_statement, headers=headers)
    
    rst = get_statement_response.json()['output']['data']['text/plain']
    print(rst)
    
  2. Kjør notatblokkcellen, du bør se flere trinnvise linjer skrevet ut når jobben sendes inn, og resultatene returneres.

    Skjermbilde som viser resultatene av den andre kjøringen av notatblokkcellen.

Lukk Livy-økten med en tredje setning

  1. Legg til en annen notatblokkcelle, og sett inn denne koden.

    # call get session API with a delete session statement
    
    get_session_response = requests.get(livy_session_url, headers=headers)
    print('Livy statement URL ' + livy_session_url)
    
    response = requests.delete(livy_session_url, headers=headers)
    print (response)
    

Vise jobbene dine i overvåkingshuben

Du kan få tilgang til overvåkingshuben for å vise ulike Apache Spark-aktiviteter ved å velge Monitor i navigasjonskoblingene til venstre.

  1. Når økten pågår eller er i fullført tilstand, kan du vise øktstatusen ved å navigere til Monitor.

    Skjermbilde som viser tidligere Livy API-innsendinger i overvåkingshuben.

  2. Velg og åpne det nyeste aktivitetsnavnet.

    Skjermbilde som viser den nyeste Livy API-aktiviteten i overvåkingshuben.

  3. I dette livy API-økttilfellet kan du se tidligere øktinnsendinger, kjøre detaljer, Spark-versjoner og konfigurasjon. Legg merke til stoppet status øverst til høyre.

    Skjermbilde som viser de nyeste aktivitetsdetaljene for Livy API i overvåkingshuben.

Hvis du vil oppsummere hele prosessen, trenger du en ekstern klient, for eksempel Visual Studio Code, et Microsoft Entra-apptoken, Livy API-endepunktnettadresse, godkjenning mot Lakehouse og til slutt en Session Livy API.