Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.
Exécutez des charges de travail interactives avec EMR Serverless via un point de terminaison Apache Livy
Avec les EMR versions 6.14.0 et supérieures d'Amazon, vous pouvez créer et activer un point de terminaison Apache Livy tout en créant une application EMR sans serveur et exécuter des charges de travail interactives via vos blocs-notes auto-hébergés ou avec un client personnalisé. Un point de terminaison Apache Livy offre les avantages suivants :
-
Vous pouvez vous connecter en toute sécurité à un point de terminaison Apache Livy via les blocs-notes Jupyter et gérer les charges de travail Apache Spark avec l'interface d'Apache Livy. REST
-
Utilisez les REST API opérations Apache Livy pour les applications Web interactives qui utilisent les données des charges de travail Apache Spark.
Prérequis
Pour utiliser un point de terminaison Apache Livy avec EMR Serverless, vous devez répondre aux exigences suivantes :
-
Suivez les étapes décrites dans Getting started with Amazon EMR Serverless.
-
Pour exécuter des charges de travail interactives via les points de terminaison Apache Livy, vous avez besoin de certaines autorisations et de certains rôles. Pour plus d'informations, consultez la section Autorisations requises pour les charges de travail interactives.
Autorisations nécessaires
Outre les autorisations requises pour accéder à EMR Serverless, vous devez également ajouter les autorisations suivantes à votre IAM rôle pour accéder à un point de terminaison Apache Livy et exécuter des applications :
-
emr-serverless:AccessLivyEndpoints
— autorise l'accès et la connexion à l'application compatible Livy que vous spécifiez comme.Resource
Vous avez besoin de cette autorisation pour exécuter les REST API opérations disponibles depuis le point de terminaison Apache Livy. -
iam:PassRole
— autorise l'accès au rôle d'IAMexécution lors de la création de la session Apache Livy. EMR Serverless utilisera ce rôle pour exécuter vos charges de travail. -
emr-serverless:GetDashboardForJobRun
— autorise la génération de l'interface utilisateur de Spark Live et des liens vers les journaux des pilotes et donne accès aux journaux dans le cadre des résultats de la session Apache Livy.
{ "Version": "2012-10-17", "Statement": [{ "Sid": "EMRServerlessInteractiveAccess", "Effect": "Allow", "Action": "emr-serverless:AccessLivyEndpoints", "Resource": "arn:aws:emr-serverless:<AWS_REGION>:account:/applications/*" }, { "Sid": "EMRServerlessRuntimeRoleAccess", "Effect": "Allow", "Action": "iam:PassRole", "Resource": "execution-role-ARN", "Condition": { "StringLike": { "iam:PassedToService": "emr-serverless.amazonaws.com" } } }, { "Sid": "EMRServerlessDashboardAccess", "Effect": "Allow", "Action": "emr-serverless:GetDashboardForJobRun", "Resource": "arn:aws:emr-serverless:
<AWS_REGION>
:account:/applications/*" } ] }
Premiers pas
Pour créer une application compatible Apache Livy et l'exécuter, procédez comme suit.
Pour créer une application compatible avec Apache Livy, exécutez la commande suivante.
aws emr-serverless create-application \ --name
my-application-name
\ --type 'application-type
' \ --release-label <Amazon EMR-release-version> --interactive-configuration '{"livyEndpointEnabled": true}'-
Une fois que EMR Serverless a créé votre application, démarrez-la pour rendre le point de terminaison Apache Livy disponible.
aws emr-serverless start-application \ --application-id
application-id
Utilisez la commande suivante pour vérifier l'état de votre demande. Une fois le statut atteint
STARTED
, vous pouvez accéder au point de terminaison Apache Livy.aws emr-serverless get-application \ --region
<AWS_REGION>
--application-id>application_id>
-
Utilisez ce qui suit URL pour accéder au point de terminaison :
https://_
<application-id>
_.livy.emr-serverless-services._<AWS_REGION>
_.amazonaws.com
Une fois que le point de terminaison est prêt, vous pouvez soumettre des charges de travail en fonction de votre cas d'utilisation. Vous devez signer chaque demande envoyée au point de terminaison avec le SIGv4 protocole et transmettre un en-tête d'autorisation. Vous pouvez utiliser les méthodes suivantes pour exécuter des charges de travail :
-
HTTPclient : vous devez soumettre les API opérations de votre point de terminaison Apache Livy à un HTTP client personnalisé.
-
Noyau Sparkmagic : vous devez exécuter localement le noyau Sparkmagic et soumettre des requêtes interactives avec les blocs-notes Jupyter.
HTTPclients
Pour créer une session Apache Livy, vous devez la soumettre emr-serverless.session.executionRoleArn
dans le conf
paramètre du corps de votre requête. L'exemple suivant est un exemple de POST /sessions
demande.
{ "kind": "pyspark", "heartbeatTimeoutInSecond": 60, "conf": { "emr-serverless.session.executionRoleArn": "
<executionRoleArn>
" } }
Le tableau suivant décrit toutes les API opérations Apache Livy disponibles.
Opération API | Description |
---|---|
GET/sessions | Renvoie la liste de toutes les sessions interactives actives. |
POST/sessions | Crée une nouvelle session interactive via Spark ou Pyspark. |
GET/sessions/ < > sessionId |
Renvoie les informations de session. |
GET/sessions/ < >/état sessionId |
Renvoie l'état de la session. |
DELETE/sessions/ < > sessionId |
Arrête et supprime la session. |
GET/sessions/ < >/déclarations sessionId |
Renvoie toutes les instructions d'une session. |
POST/sessions/ < >/déclarations sessionId |
Exécute une instruction dans une session. |
GET/sessions/ < >/déclarations/< > sessionId statementId |
Renvoie les détails de l'instruction spécifiée dans une session. |
POST/sessions/ < >/déclarations/< >/annuler sessionId statementId |
Annule l'instruction spécifiée dans cette session. |
Envoi de requêtes au point de terminaison Apache Livy
Vous pouvez également envoyer des demandes directement au point de terminaison Apache Livy depuis un HTTP client. Cela vous permet d'exécuter du code à distance pour vos cas d'utilisation en dehors d'un bloc-notes.
Avant de commencer à envoyer des demandes au terminal, assurez-vous d'avoir installé les bibliothèques suivantes :
pip3 install botocore awscrt requests
Voici un exemple de script Python permettant d'envoyer des HTTP demandes directement à un point de terminaison :
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())
Noyau Sparkmagic
Avant d'installer sparkmagic, assurez-vous d'avoir configuré les AWS informations d'identification dans l'instance dans laquelle vous souhaitez installer sparkmagic
-
Installez sparkmagic en suivant les étapes d'installation
. Notez que vous n'avez qu'à effectuer les quatre premières étapes. -
Le noyau sparkmagic prend en charge les authentificateurs personnalisés. Vous pouvez donc intégrer un authentificateur au noyau sparkmagic afin que chaque demande soit signée. SIGv4
-
Installez l'authentificateur personnalisé EMR sans serveur.
pip install emr-serverless-customauth
-
Indiquez maintenant le chemin d'accès à l'authentificateur personnalisé et au point de terminaison Apache Livy URL dans le fichier json de configuration de sparkmagic. Utilisez la commande suivante pour ouvrir le fichier de configuration.
vim ~/.sparkmagic/config.json
Voici un exemple de
config.json
fichier.{ "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 } -
Démarrez Jupyter Lab. Il doit utiliser l'authentification personnalisée que vous avez configurée lors de la dernière étape.
-
Vous pouvez ensuite exécuter les commandes de bloc-notes suivantes et votre code pour commencer.
%%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
En interne, chaque instruction appelle chacune des API opérations Apache Livy via le point de terminaison Apache Livy configuré. URL Vous pouvez ensuite rédiger vos instructions en fonction de votre cas d'utilisation.
Considérations
Tenez compte des considérations suivantes lorsque vous exécutez des charges de travail interactives via les points de terminaison Apache Livy.
-
EMRServerless maintient l'isolation au niveau de la session en utilisant le principal de l'appelant. Le principal appelant qui crée la session est le seul à pouvoir accéder à cette session. Pour une isolation plus précise, vous pouvez configurer une identité source lorsque vous utilisez des informations d'identification. Dans ce cas, EMR Serverless applique l'isolation au niveau de la session en fonction à la fois de l'identité principale de l'appelant et de l'identité de la source. Pour plus d'informations sur l'identité de la source, voir Surveiller et contrôler les actions entreprises avec des rôles assumés.
-
Les points de terminaison Apache Livy sont pris en charge avec les versions 6.14.0 et EMR supérieures sans serveur.
-
Les points de terminaison Apache Livy ne sont pris en charge que pour le moteur Apache Spark.
-
Les points de terminaison Apache Livy prennent en charge Scala Spark et. PySpark
-
Par défaut,
autoStopConfig
est activé dans vos applications. Cela signifie que les applications s'arrêtent après 15 minutes d'inactivité. Vous pouvez modifier cette configuration dans le cadre de votreupdate-application
demandecreate-application
ou de votre demande. -
Vous pouvez exécuter jusqu'à 25 sessions simultanées sur une seule application compatible avec le point de terminaison Apache Livy.
-
Pour une expérience de démarrage optimale, nous vous recommandons de configurer la capacité pré-initialisée pour les pilotes et les exécuteurs.
-
Vous devez démarrer manuellement votre application avant de vous connecter au point de terminaison Apache Livy.
-
Vous devez disposer d'un quota de CPU service v suffisant Compte AWS pour exécuter des charges de travail interactives avec le point de terminaison Apache Livy. Nous recommandons au moins 24 CPU v.
-
Le délai d'expiration de session Apache Livy par défaut est de 1 heure. Si vous n'exécutez pas d'instructions pendant une heure, Apache Livy supprime la session et libère le pilote et les exécuteurs. Vous ne pouvez pas modifier cette configuration.
-
Seules les sessions actives peuvent interagir avec un point de terminaison Apache Livy. Une fois la session terminée, annulée ou terminée, vous ne pouvez pas y accéder via le point de terminaison Apache Livy.