As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.
Execução de workloads interativas com o EMR Servidor por meio de um endpoint do Apache Livy
Com as versões 6.14.0 e superiores do Amazon EMR, crie e habilite um endpoint Apache Livy ao criar um aplicativo EMR Serverless e execute cargas de trabalho interativas por meio de seus notebooks auto-hospedados ou com um cliente personalizado. Um endpoint do Apache Livy oferece os seguintes benefícios:
-
Você pode se conectar com segurança a um endpoint do Apache Livy por meio de cadernos Jupyter e gerenciar workloads do Apache Spark com a interface REST do Apache Livy.
-
Use as operações da API REST do Apache Livy para aplicações Web interativas que utilizam dados das workloads do Apache Spark.
Pré-requisitos
Para usar um endpoint Apache Livy com o EMR Serverless, atenda aos seguintes requisitos:
-
Conclua as etapas em Getting started with Amazon EMR Serverless.
-
Para executar workloads interativas por meio dos endpoints do Apache Livy, você precisa de determinadas permissões e perfis. Para obter mais informações, consulte Permissões necessárias para cargas de trabalho interativas.
Permissões obrigatórias
Além das permissões necessárias para acessar o EMR Serverless, adicione também as seguintes permissões à sua função do IAM para acessar um endpoint Apache Livy e executar aplicativos:
-
emr-serverless:AccessLivyEndpoints: concede permissão para acessar e se conectar à aplicação habilitada para Livy especificada comoResource. Você precisa dessa permissão para executar as operações da API REST disponíveis no endpoint do Apache Livy. -
iam:PassRole— concede permissão para acessar a função de execução do IAM ao criar a sessão do Apache Livy. O EMR Sem Servidor usará esse perfil para executar suas workloads. -
emr-serverless:GetDashboardForJobRun: concede permissão para gerar a interface do usuário do Spark Live e os links de log do driver e fornece acesso aos logs como parte dos resultados da sessão do Apache Livy.
Conceitos básicos
Para criar uma aplicação habilitada para Apache Livy e executá-la, siga estas etapas.
Para criar uma aplicação habilitada para Apache Livy, execute o comando a seguir.
aws emr-serverless create-application \ --namemy-application-name\ --type 'application-type' \ --release-label <Amazon EMR-release-version> --interactive-configuration '{"livyEndpointEnabled": true}'-
Depois que o EMR Sem Servidor criar a aplicação, inicie-a para disponibilizar o endpoint do Apache Livy.
aws emr-serverless start-application \ --application-idapplication-idUse o comando a seguir para verificar o status da aplicação. Quando o status se tornar
STARTED, acesse o endpoint Apache Livy.aws emr-serverless get-application \ --region<AWS_REGION>--application-id>application_id> -
Use o seguinte URL para acessar o endpoint:
https://_<application-id>_.livy.emr-serverless-services._<AWS_REGION>_.amazonaws.com
Quando o endpoint estiver pronto, envie cargas de trabalho com base no seu caso de uso. Você deve assinar todas as solicitações no endpoint com o SIGv4 protocolo e passar um cabeçalho de autorização. É possível usar os seguintes métodos para executar workloads:
-
Cliente HTTP — envie suas operações da API de endpoint Apache Livy com um cliente HTTP personalizado.
-
Kernel Sparkmagic — execute o kernel sparkmagic localmente e envie consultas interativas com os notebooks Jupyter.
Clientes HTTP
Para criar uma sessão do Apache Livy, envie emr-serverless.session.executionRoleArn no conf parâmetro do corpo da sua solicitação. Confira a seguir um exemplo de solicitação POST /sessions.
{ "kind": "pyspark", "heartbeatTimeoutInSecond": 60, "conf": { "emr-serverless.session.executionRoleArn": "<executionRoleArn>" } }
A tabela a seguir descreve todas as operações disponíveis da API do Apache Livy.
| Operação de API | Descrição |
|---|---|
| GET /sessions | Retorna uma lista de todas as sessões interativas ativas. |
| POST /sessions | Cria uma sessão interativa por meio do Spark ou PySpark. |
OBTENHA /sessions/ < > sessionId |
Retorna as informações da sessão. |
GET /sessions/ < >/state sessionId |
Retorna o estado da sessão. |
EXCLUIR /sessions/ < > sessionId |
Interrompe e exclui a sessão. |
GET /sessions/ < >/declarações sessionId |
Retorna todas as instruções em uma sessão. |
POST /sessions/ < >/declarações sessionId |
Executa de uma instrução em uma sessão. |
GET /sessions/ < >/declarações/< > sessionId statementId |
Retorna os detalhes da instrução especificada em uma sessão. |
POST /sessions/ < >/declarações/< >/cancelar sessionId statementId |
Cancela a instrução especificada nesta sessão. |
Envio de solicitações ao endpoint do Apache Livy
Você também pode enviar solicitações diretamente ao endpoint do Apache Livy de um cliente HTTP. Isso permite executar remotamente o código para casos de uso fora de um caderno.
Antes de começar a enviar solicitações para o endpoint, verifique se você instalou as seguintes bibliotecas:
pip3 install botocore awscrt requests
Confira este exemplo de script Python para enviar solicitações HTTP diretamente a um endpoint:
from botocore import crt import requests from botocore.awsrequest import AWSRequest from botocore.credentials import Credentials import botocore.session import json, pprint, textwrap endpoint = 'https://<application_id>.livy.emr-serverless-services.<AWS_REGION>.amazonaws.com' headers = {'Content-Type': 'application/json'} session = botocore.session.Session() signer = crt.auth.CrtS3SigV4Auth(session.get_credentials(), 'emr-serverless', '<AWS_REGION>') ### Create session request data = {'kind': 'pyspark', 'heartbeatTimeoutInSecond': 60, 'conf': { 'emr-serverless.session.executionRoleArn': 'arn:aws:iam::123456789012:role/role1'}} request = AWSRequest(method='POST', url=endpoint + "/sessions", data=json.dumps(data), headers=headers) request.context["payload_signing_enabled"] = False signer.add_auth(request) prepped = request.prepare() r = requests.post(prepped.url, headers=prepped.headers, data=json.dumps(data)) pprint.pprint(r.json()) ### List Sessions Request request = AWSRequest(method='GET', url=endpoint + "/sessions", headers=headers) request.context["payload_signing_enabled"] = False signer.add_auth(request) prepped = request.prepare() r2 = requests.get(prepped.url, headers=prepped.headers) pprint.pprint(r2.json()) ### Get session state session_url = endpoint + r.headers['location'] request = AWSRequest(method='GET', url=session_url, headers=headers) request.context["payload_signing_enabled"] = False signer.add_auth(request) prepped = request.prepare() r3 = requests.get(prepped.url, headers=prepped.headers) pprint.pprint(r3.json()) ### Submit Statement data = { 'code': "1 + 1" } statements_url = endpoint + r.headers['location'] + "/statements" request = AWSRequest(method='POST', url=statements_url, data=json.dumps(data), headers=headers) request.context["payload_signing_enabled"] = False signer.add_auth(request) prepped = request.prepare() r4 = requests.post(prepped.url, headers=prepped.headers, data=json.dumps(data)) pprint.pprint(r4.json()) ### Check statements results specific_statement_url = endpoint + r4.headers['location'] request = AWSRequest(method='GET', url=specific_statement_url, headers=headers) request.context["payload_signing_enabled"] = False signer.add_auth(request) prepped = request.prepare() r5 = requests.get(prepped.url, headers=prepped.headers) pprint.pprint(r5.json()) ### Delete session session_url = endpoint + r.headers['location'] request = AWSRequest(method='DELETE', url=session_url, headers=headers) request.context["payload_signing_enabled"] = False signer.add_auth(request) prepped = request.prepare() r6 = requests.delete(prepped.url, headers=prepped.headers) pprint.pprint(r6.json())
Kernel do Sparkmagic
Antes de instalar o sparkmagic, verifique se você configurou AWS as credenciais na instância em que deseja instalar o sparkmagic
-
Instale o Sparkmagic seguindo as etapas de instalação
. Observe que você executa apenas as quatro primeiras etapas. -
O kernel sparkmagic oferece suporte a autenticadores personalizados, para que você possa integrar um autenticador ao kernel sparkmagic para que cada solicitação seja assinada. SIGv4
-
Instale o autenticador personalizado do EMR Sem Servidor.
pip install emr-serverless-customauth -
Agora, forneça o caminho para o autenticador personalizado e o URL do endpoint do Apache Livy no arquivo JSON de configuração do Sparkmagic. Use o comando a seguir para abrir o arquivo de configuração.
vim ~/.sparkmagic/config.jsonVeja a seguir um exemplo de arquivo
config.json.{ "kernel_python_credentials" : { "username": "", "password": "", "url": "https://<application-id>.livy.emr-serverless-services.<AWS_REGION>.amazonaws.com", "auth": "Custom_Auth" }, "kernel_scala_credentials" : { "username": "", "password": "", "url": "https://<application-id>.livy.emr-serverless-services.<AWS_REGION>.amazonaws.com", "auth": "Custom_Auth" }, "authenticators": { "None": "sparkmagic.auth.customauth.Authenticator", "Basic_Access": "sparkmagic.auth.basic.Basic", "Custom_Auth": "emr_serverless_customauth.customauthenticator.EMRServerlessCustomSigV4Signer" }, "livy_session_startup_timeout_seconds": 600, "ignore_ssl_errors": false } -
Inicie o Jupyter Lab. Ele deve usar a autenticação personalizada que você configurou na última etapa.
-
Em seguida, você pode executar os comandos a seguir do caderno e seu código para começar.
%%info //Returns the information about the current sessions.%%configure -f //Configure information specific to a session. We supply executionRoleArn in this example. Change it for your use case. { "driverMemory": "4g", "conf": { "emr-serverless.session.executionRoleArn": "arn:aws:iam::123456789012:role/JobExecutionRole" } }<your code>//Run your code to start the session
Internamente, cada instrução chama cada uma das operações da API do Apache Livy por meio do URL configurado do endpoint do Apache Livy. Em seguida, você pode gravar suas instruções de acordo com o caso de uso.
Considerações
Considere as informações a seguir ao executar workloads interativas por meio de endpoints do Apache Livy.
-
O EMR Sem Servidor mantém o isolamento em nível de sessão usando a entidade principal do chamador. A entidade principal do chamador que cria a sessão é o único que pode acessá-la. Para um isolamento mais granular, configure uma identidade de origem ao assumir as credenciais. Nesse caso, o EMR Serverless impõe o isolamento em nível de sessão com base no chamador principal e na identidade de origem. Para obter mais informações sobre a identidade de origem, consulte Monitorar e controlar ações tomadas com funções assumidas.
-
Os endpoints do Apache Livy são compatíveis com as versões 6.14.0 e superiores do EMR Sem Servidor.
-
Os endpoints do Apache Livy são compatíveis somente com o mecanismo Apache Spark.
-
Os endpoints Apache Livy são compatíveis com Scala Spark e. PySpark
-
Por padrão,
autoStopConfigestá habilitado nas aplicações. Isso significa que as aplicações são encerradas após 15 minutos de inatividade. Você pode alterar essa configuração como parte da solicitaçãocreate-applicationouupdate-application. -
Você pode executar até 25 sessões simultâneas em uma única aplicação habilitada para endpoint do Apache Livy.
-
Para obter a melhor experiência de inicialização, sugerimos que você configure a capacidade pré-inicializada para drivers e executores.
-
Você deve iniciar manualmente a aplicação antes de se conectar ao endpoint do Apache Livy.
-
Você deve ter uma cota de serviço de vCPU suficiente Conta da AWS para executar cargas de trabalho interativas com o endpoint Apache Livy. Sugerimos pelo menos 24 vCPUs.
-
O tempo limite padrão de uma sessão do Apache Livy é de uma hora. Se você não executar instruções por uma hora, o Apache Livy excluirá a sessão e liberará o driver e os executores. A partir da versão emr-7.8.0, esse valor pode ser definido especificando o
ttlparâmetro como parte da/sessions POSTsolicitação do Livy, por exemplo,2h(horas), (minutos), (segundos),120m(milissegundos).7200s7200000msnota
Essa configuração não pode ser alterada antes do emr-7.8.0. Veja a seguir uma amostra do corpo de uma
POST /sessionssolicitação.{ "kind": "pyspark", "heartbeatTimeoutInSecond": 60, "conf": { "emr-serverless.session.executionRoleArn": "executionRoleArn" }, "ttl": "2h" } A partir da versão emr-7.8.0 do Amazon EMR para aplicativos com controle de acesso refinado via LakeFormation enabled, a configuração pode ser desativada por sessão. Para obter mais informações sobre como habilitar o controle de acesso refinado para um aplicativo EMR Serverless, consulte Métodos para controle de acesso refinado.
nota
O Lake Formation não pode ser habilitado para uma sessão quando não foi habilitado para um aplicativo. Veja a seguir uma amostra do corpo de uma
POST /sessionssolicitação.{ "kind": "pyspark", "heartbeatTimeoutInSecond": 60, "conf": { "emr-serverless.session.executionRoleArn": "executionRoleArn" }, "spark.emr-serverless.lakeformation.enabled" : "false" }-
Somente sessões ativas podem interagir com um endpoint do Apache Livy. Depois que a sessão for concluída, cancelada ou encerrada, você não poderá acessá-la por meio do endpoint do Apache Livy.