Partilhar via


Use a API do Livy para enviar e executar trabalhos de sessão do Spark com credenciais de usuário

Aplica-se a: ✅ Fabric Engenharia de Dados e Ciência de Dados

A API do Fabric Livy permite-lhe submeter trabalhos em lote e sessão do Spark diretamente de um cliente remoto para o Fabric Spark compute, sem usar o portal Fabric. Neste artigo, cria um Lakehouse, autentica-se com um token Microsoft Entra, descobre o endpoint da API do Livy e submete e monitoriza um trabalho de sessão do Spark.

Pré-requisitos

Escolha um cliente API REST

Pode interagir com a API do Livy a partir de qualquer cliente que suporte pedidos HTTP, incluindo ferramentas como o curl ou qualquer linguagem com uma biblioteca HTTP. Os exemplos neste artigo usam Visual Studio Code com Jupyter Notebooks, PySpark, e o Biblioteca de Autenticação da Microsoft (MSAL) para Python.

Como autorizar os pedidos da API do Livy

Para usar a API do Livy, precisa de autenticar os seus pedidos usando o Microsoft Entra ID. Existem dois métodos de autorização disponíveis:

  • Entra SPN Token (Principal de Serviço): A aplicação autentica-se por si mesma usando credenciais, como um segredo de aplicação ou certificado. Este método é adequado para processos automatizados e serviços em segundo plano onde não é necessária interação do utilizador.

  • Token da aplicação Entra (Delegado): A aplicação atua em nome de um utilizador iniciado. Este método é adequado quando se quer que a aplicação aceda a recursos com as permissões do utilizador autenticado.

Escolha o método de autorização que melhor se adapte ao seu cenário e siga a secção correspondente abaixo.

Como autorizar os pedidos da API Livy com um Microsoft Entra SPN Token

Para trabalhar com APIs do Fabric, incluindo a API do Livy, primeiro precisa de criar uma aplicação Microsoft Entra, criar um segredo e usar esse segredo no seu código. A sua aplicação precisa de estar registada e configurada adequadamente para realizar chamadas de API contra o Fabric. Para mais informações, consulte Adicionar e gerir credenciais de aplicação em Microsoft Entra ID

  1. Depois de criar o registro do aplicativo, crie um segredo do cliente.

    Captura de ecrã a mostrar o registo da Microsoft Entra aplicação e adicionar um segredo do cliente.

  2. Ao criar o segredo do cliente, certifique-se de copiar o valor. Você precisa disso mais tarde no código, e o segredo não pode ser visto novamente. Também precisas do ID da Aplicação (cliente) e do Diretório (ID do inquilino), além do segredo no teu código.

  3. De seguida, adicione o principal de serviço ao seu espaço de trabalho.

    Captura de tela mostrando as configurações do Lakehouse para gerenciar opções de acesso.

  4. Pesquise a aplicação Microsoft Entra usando o ID ou nome da Aplicação (cliente), adicione-a ao espaço de trabalho e certifique-se de que o principal do serviço tem permissões de Contribuidor.

    Captura de tela mostrando a adição da nova entidade de serviço SPN ao espaço de trabalho.

Como autorizar as solicitações da API Livy com um token de aplicativo Entra

Para trabalhar com APIs Fabric, incluindo a API Livy, é necessário primeiro criar uma aplicação Microsoft Entra e obter um token. A sua aplicação precisa de estar registada e configurada adequadamente para realizar chamadas de API contra o Fabric. Para mais informações, consulte Registe uma candidatura no plataforma de identidades da Microsoft.

São necessárias as seguintes permissões para o âmbito do Microsoft Entra para executar trabalhos da API do Livy:

Captura de ecrã a mostrar permissões da API do Livy no centro de administração Microsoft Entra.

Osciloscópios obrigatórios

Scope Descrição
Lakehouse.Execute.All Executar operações nas casas do lago Fabric.
Lakehouse.Read.All Leia os metadados do lakehouse.
Code.AccessFabric.All Permite obter tokens de acesso ao Microsoft Fabric. Obrigatório para todas as operações da API do Livy.
Code.AccessStorage.All Permite obter tokens de acesso ao OneLake e ao armazenamento do Azure. Necessária para ler e escrever dados em casas de lago.

Código Opcional: Âmbitos

Adicione estes escopos apenas se os seus trabalhos Spark precisarem de aceder aos serviços correspondentes do Azure em tempo de execução.

Scope Descrição Quando utilizar
Code.AccessAzureKeyvault.All Permite obter tokens de acesso ao Azure Key Vault. O seu código Spark recupera segredos, chaves ou certificados do Azure Key Vault.
Code.AccessAzureDataLake.All Permite obter tokens de acesso ao Azure Data Lake Storage Gen1. O seu código Spark lê ou escreve para contas Azure Data Lake Storage Gen1.
Code.AccessAzureDataExplorer.All Permite obter tokens de acesso ao Azure Data Explorer (Kusto). O seu código Spark consulta ou ingere dados para/de clusters do Azure Data Explorer.
Code.AccessSQL.All Permite obter tokens de acesso ao SQL do Azure. O seu código Spark precisa de se ligar a bases de dados SQL do Azure.

Quando regista a sua candidatura, precisa tanto do ID da Aplicação (cliente) como do ID do Diretório (inquilino).

Captura de ecrã mostrando a visão geral da aplicação API do Livy na centro de administração Microsoft Entra.

O usuário autenticado que chama a API Livy precisa ser um membro do espaço de trabalho onde os itens da API e da fonte de dados estão localizados com uma função de Colaborador. Para obter mais informações, consulte Conceder aos usuários acesso a espaços de trabalho.

Compreender os escopos do Code.* para a API do Livy

Quando os seus trabalhos Spark são executados através da API do Livy, os Code.* scopes controlam quais serviços externos o Spark Runtime pode aceder em nome do utilizador autenticado. São necessárias duas; Os restantes são opcionais dependendo da tua carga de trabalho.

Códigos obrigatórios.*

Scope Descrição
Code.AccessFabric.All Permite obter tokens de acesso ao Microsoft Fabric. Obrigatório para todas as operações da API do Livy.
Code.AccessStorage.All Permite obter tokens de acesso ao OneLake e ao armazenamento do Azure. Necessária para ler e escrever dados em casas de lago.

Code Opcionais.* contextos

Adicione estes escopos apenas se os seus trabalhos Spark precisarem de aceder aos serviços correspondentes do Azure em tempo de execução.

Scope Descrição Quando utilizar
Code.AccessAzureKeyvault.All Permite obter tokens de acesso ao Azure Key Vault. O seu código Spark recupera segredos, chaves ou certificados do Azure Key Vault.
Code.AccessAzureDataLake.All Permite obter tokens de acesso ao Azure Data Lake Storage Gen1. O seu código Spark lê ou escreve para contas Azure Data Lake Storage Gen1.
Code.AccessAzureDataExplorer.All Permite obter tokens de acesso ao Azure Data Explorer (Kusto). O seu código Spark consulta ou ingere dados para/de clusters do Azure Data Explorer.
Code.AccessSQL.All Permite obter tokens de acesso ao SQL do Azure. O seu código Spark precisa de se ligar a bases de dados SQL do Azure.

Nota

Os âmbitos Lakehouse.Execute.All e Lakehouse.Read.All também são obrigatórios, mas não fazem parte da família Code.*. Concedem permissão para executar operações em casas de dados Fabric e ler metadados, respetivamente.

Como descobrir o endpoint da API do Fabric Livy

É necessário um artefato Lakehouse para aceder ao endpoint Livy. Depois que o Lakehouse é criado, o endpoint da API Livy pode ser localizado dentro do painel de configurações.

Captura de tela mostrando os pontos de extremidade da API Livy nas configurações do Lakehouse.

O ponto de extremidade da API Livy seguiria este padrão:

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

A URL é anexada com <sessões> ou <lotes>, dependendo do que escolheres.

Baixe os arquivos do Livy API Swagger

Os ficheiros Swagger completos para a API Livy estão disponíveis aqui.

Sessões de alta concorrência

O suporte para alta concorrência (HC) permite a execução simultânea do Spark ao permitir que os clientes adquiram múltiplos contextos de execução independentes, chamados sessões de alta concorrência.

Cada sessão HC representa um contexto lógico de execução que corresponde a um Spark REPL (Read-Eval-Print Loop). As instruções Spark submetidas em diferentes sessões HC podem ser executadas em simultâneo.

Isto permite:

  • Execução paralela entre sessões HC
  • Utilização previsível de recursos
  • Isolamento entre pedidos concorrentes
  • Menor overhead comparado com criar uma nova sessão por pedido

Usar uma única sessão para todos os pedidos faz com que as instruções sejam executadas sequencialmente. Criar uma nova sessão para cada pedido introduz sobrecarga desnecessária e subutilização de recursos.

Nota

A aquisição de sessões HC não é idempotente. Múltiplos pedidos de aquisição com o mesmo sessionTag retornam IDs de sessão HC diferentes, mesmo quando são suportados pela mesma sessão Livy subjacente.

Para um guia passo a passo com código de exemplo, veja Inicie com a API Livy para Sessões de Elevada Concorrência no Fabric. Para uma visão conceptual, consulte Suporte a alta concorrência na Fabric Livy API.

Enviar trabalhos da API Livy

Agora que a configuração da API do Livy está concluída, você pode optar por enviar trabalhos em lote ou de sessão.

Integração com ambientes Fabric

Por padrão, essa sessão da API Livy é executada no pool inicial padrão para o espaço de trabalho. Alternativamente, podes usar Fabric Ambientes Criar, configurar e usar um ambiente em Microsoft Fabric para personalizar o pool Spark que a sessão da API do Livy usa para estes trabalhos do Spark.

Para usar um Ambiente Fabric numa sessão Livy Spark, atualize o json para incluir esta carga útil.

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

Para usar um Ambiente Fabric numa sessão batch do Livy Spark, atualize o payload json como mostrado aqui:

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

Como monitorar o histórico de solicitações

Você pode usar o Hub de Monitoramento para ver seus envios anteriores da API Livy e depurar quaisquer erros de envios.

Captura de tela mostrando envios anteriores da API Livy no hub de monitoramento.