Uso de livy API para enviar y ejecutar trabajos de sesión de Spark con credenciales de usuario

Se aplica a:✅ Fabric Data Engineering and Data Science

La API de Fabric Livy le permite enviar trabajos por lotes y de sesión de Spark desde un cliente remoto directamente a Fabric Spark compute, sin usar el portal de Fabric. En este artículo, creará un Lakehouse, se autenticará con un token de Microsoft Entra, descubrirá el punto de conexión de la API de Livy y enviará y supervisará un trabajo de sesión de Spark.

Requisitos previos

Elección de un cliente de API REST

Puede interactuar con livy API desde cualquier cliente que admita solicitudes HTTP, incluidas herramientas como curl o cualquier lenguaje con una biblioteca HTTP. Los ejemplos de este artículo usan Visual Studio Code con Jupyter Notebooks, PySpark y el Microsoft Authentication Library (MSAL) para Python.

Autorización de las solicitudes de livy API

Para usar livy API, debe autenticar las solicitudes mediante Microsoft Entra ID. Hay dos métodos de autorización disponibles:

  • Entra SPN Token (Principal de Servicio): la aplicación se autentica como sí misma mediante credenciales como un secreto de cliente o un certificado. Este método es adecuado para procesos automatizados y servicios en segundo plano en los que no se requiere ninguna interacción del usuario.

  • Token de aplicación Entra (delegado): la aplicación actúa por un usuario que ha iniciado sesión. Este método es adecuado cuando desea que la aplicación acceda a los recursos con los permisos del usuario autenticado.

Elija el método de autorización que mejor se adapte a su escenario y siga la sección correspondiente a continuación.

Cómo autorizar las solicitudes de la API de Livy con un token de SPN de Microsoft Entra

Para trabajar con Fabric API, incluida la API de Livy, primero debe crear una aplicación de Microsoft Entra y crear un secreto y usar ese secreto en el código. La aplicación debe registrarse y configurarse adecuadamente para realizar llamadas API en Fabric. Para obtener más información, consulte Agregar y administrar credenciales de aplicación en Microsoft Entra ID

  1. Después de crear el registro de la aplicación, cree un secreto de cliente.

    Captura de pantalla que muestra el registro de aplicaciones de Microsoft Entra y la adición de un secreto de cliente.

  2. Al crear el secreto de cliente, asegúrese de copiar el valor. Lo necesitarás más adelante en el código y el secreto no se podrá ver de nuevo. También necesita el ID de aplicación (cliente) y el ID de directorio (ID de inquilino) además del secreto en el código.

  3. A continuación, agregue el principal del servicio a su espacio de trabajo.

    Captura de pantalla que muestra las opciones para gestionar el acceso en la configuración de Lakehouse.

  4. Busque la aplicación Microsoft Entra con el identificador o el nombre de la aplicación (cliente), agréguelos al área de trabajo y asegúrese de que la entidad de servicio tiene permisos de Colaborador.

    Recorte de pantalla que muestra cómo agregar la nueva entidad de servicio SPN al área de trabajo.

Cómo autorizar las solicitudes de la API de Livy con un token de aplicación Entra

Para trabajar con Fabric API, incluida livy API, primero debe crear una aplicación de Microsoft Entra y obtener un token. La aplicación debe registrarse y configurarse adecuadamente para realizar llamadas API en Fabric. Para obtener más información, consulte Registrar una aplicación con la plataforma de identidad de Microsoft.

Los siguientes permisos de ámbito de Microsoft Entra son necesarios para ejecutar trabajos de Livy API:

Screenshot que muestra los permisos de la API de Livy en el Microsoft Entra admin center.

Ámbitos necesarios

Ámbito Descripción
Lakehouse.Execute.All Ejecute operaciones en Fabric lakehouses.
Lakehouse.Read.All Lee los metadatos de lakehouse.
Code.AccessFabric.All Permite obtener tokens de acceso para Microsoft Fabric. Necesario para todas las operaciones de Livy API.
Code.AccessStorage.All Permite obtener tokens de acceso a OneLake y almacenamiento de Azure. Necesario para la lectura y escritura de datos en lakehouses.

Ámbitos opcionales de Code.*

Agregue estos ámbitos solo si los trabajos de Spark necesitan acceder a los servicios de Azure correspondientes en tiempo de ejecución.

Ámbito Descripción Cuándo se deben usar
Code.AccessAzureKeyvault.All Permite obtener tokens de acceso para Azure Key Vault. El código de Spark recupera secretos, claves o certificados de Azure Key Vault.
Code.AccessAzureDataLake.All Permite obtener tokens de acceso para Azure Data Lake Storage Gen1. El código de Spark lee de o escribe en las cuentas de Azure Data Lake Storage Gen1.
Code.AccessAzureDataExplorer.All Permite obtener tokens de acceso a Azure Data Explorer (Kusto). El código de Spark consulta o ingiere datos hacia y desde clústeres de Azure Data Explorer.
Code.AccessSQL.All Permite obtener tokens de acceso para Azure SQL. El código de Spark debe conectarse a Azure SQL bases de datos.

Al registrar la aplicación, necesita el identificador de aplicación (cliente) y el identificador de directorio (inquilino).

Captura de pantalla que muestra la información general de la aplicación API de Livy en el centro de administración de Microsoft Entra.

El usuario autenticado que llama a la API Livy debe ser un miembro del área de trabajo donde tanto la API como los elementos del origen de datos se encuentran con un rol colaborador. Para más información, consulte Proporcionar acceso a los usuarios a las áreas de trabajo.

Descripción de los ámbitos Code.* para livy API

Cuando los trabajos de Spark se ejecutan a través de la API de Livy, los Code.* ámbitos controlan a qué servicios externos puede acceder Spark Runtime en representación del usuario autenticado. Se requieren dos; El resto es opcional en función de la carga de trabajo.

Ámbitos de Code.* requeridos

Ámbito Descripción
Code.AccessFabric.All Permite obtener tokens de acceso para Microsoft Fabric. Necesario para todas las operaciones de Livy API.
Code.AccessStorage.All Permite obtener tokens de acceso a OneLake y almacenamiento de Azure. Necesario para la lectura y escritura de datos en lakehouses.

Ámbitos opcionales de Code.*

Agregue estos ámbitos solo si los trabajos de Spark necesitan acceder a los servicios de Azure correspondientes en tiempo de ejecución.

Ámbito Descripción Cuándo se deben usar
Code.AccessAzureKeyvault.All Permite obtener tokens de acceso para Azure Key Vault. El código de Spark recupera secretos, claves o certificados de Azure Key Vault.
Code.AccessAzureDataLake.All Permite obtener tokens de acceso para Azure Data Lake Storage Gen1. El código de Spark lee de o escribe en las cuentas de Azure Data Lake Storage Gen1.
Code.AccessAzureDataExplorer.All Permite obtener tokens de acceso a Azure Data Explorer (Kusto). El código de Spark consulta o ingiere datos hacia y desde clústeres de Azure Data Explorer.
Code.AccessSQL.All Permite obtener tokens de acceso para Azure SQL. El código de Spark debe conectarse a Azure SQL bases de datos.

Nota:

Los ámbitos Lakehouse.Execute.All y Lakehouse.Read.All también son necesarios, pero no forman parte de la Code.* familia. Conceden permiso para ejecutar operaciones en Fabric lakehouses y para leer metadatos de ellos respectivamente.

Detección del punto de conexión de la API de Livy de Fabric

Se requiere un artefacto de Lakehouse para acceder al endpoint (punto de conexión) de Livy. Una vez creado Lakehouse, el punto de conexión de Livy API se puede ubicar en el panel de configuración.

Captura de pantalla que muestra los puntos de conexión de Livy API en la configuración de Lakehouse.

El punto de conexión de Livy API seguiría este patrón:

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

La dirección URL se anexa con <sesiones> o <lotes> en función de lo que elija.

Descarga los archivos Swagger de la Livy API

Los archivos Swagger completos para la API de Livy están disponibles aquí.

Sesiones de simultaneidad alta

La compatibilidad con alta simultaneidad (HC) permite la ejecución simultánea de Spark al permitir que los clientes adquieran varios contextos de ejecución independientes, denominados sesiones de alta simultaneidad.

Cada sesión de HC representa un contexto de ejecución lógico que se asigna a un REPL de Spark (bucle de Lectura-Evaluación-Impresión). Las instrucciones de Spark enviadas en diferentes sesiones de HC se pueden ejecutar simultáneamente.

Esto permite:

  • Ejecución en paralelo entre sesiones de HC
  • Uso predecible de recursos
  • Aislamiento entre solicitudes simultáneas
  • Menor sobrecarga en comparación con la creación de una nueva sesión por solicitud

El uso de una sola sesión para todas las solicitudes hace que las instrucciones se ejecuten secuencialmente. La creación de una nueva sesión para cada solicitud presenta sobrecarga innecesaria y infrautilización de recursos.

Nota:

La adquisición de sesión de HC no es idempotente. Varias peticiones de adquisición con el mismo valor sessionTag devuelven diferentes identificadores de sesión de HC, incluso cuando están respaldados por la misma sesión subyacente de Livy.

Para ver un tutorial paso a paso con código de ejemplo, consulte Comenzar con la API de Livy para sesiones de alta concurrencia de Fabric. Para obtener una visión general conceptual, consulte Compatibilidad con alta simultaneidad en la API de Livy Fabric.

Enviar trabajos de la API de Livy

Ahora que se ha completado la configuración de Livy API, puede optar por enviar trabajos por lotes o de sesión.

Integración con entornos de Fabric

De forma predeterminada, esta sesión de Livy API se ejecuta en el grupo de inicio predeterminado para el área de trabajo. También puede usar entornos de Fabric Crear, configurar y usar un entorno en Microsoft Fabric para personalizar el grupo de Spark que usa la sesión de la API de Livy para estos trabajos de Spark.

Para usar un entorno de Fabric en una sesión de Livy Spark, actualice el json para incluir esta carga.

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

Para usar un entorno de Fabric en una sesión por lotes de Livy Spark, actualice la carga json como se muestra aquí:

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

Supervisión del historial de solicitudes

Puede usar el Centro de supervisión para ver los envíos anteriores de Livy API y depurar los errores de envío.

Captura de pantalla que muestra los envíos anteriores de Livy API en el centro de supervisión.