Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.
Esegui carichi di lavoro interattivi con EMR Serverless tramite un endpoint Apache Livy
Con le EMR versioni 6.14.0 e successive di Amazon, puoi creare e abilitare un endpoint Apache Livy mentre crei un'applicazione EMR Serverless ed eseguire carichi di lavoro interattivi tramite notebook ospitati autonomamente o con un client personalizzato. Un endpoint Apache Livy offre i seguenti vantaggi:
-
Puoi connetterti in modo sicuro a un endpoint Apache Livy tramite i notebook Jupyter e gestire i carichi di lavoro Apache Spark con l'interfaccia di Apache Livy. REST
-
Usa le operazioni Apache Livy per applicazioni web interattive che utilizzano i dati dei carichi di lavoro Apache Spark. REST API
Prerequisiti
Per utilizzare un endpoint Apache Livy con EMR Serverless, devi soddisfare i seguenti requisiti:
-
Completa la procedura descritta in Guida introduttiva ad Amazon EMR Serverless.
-
Per eseguire carichi di lavoro interattivi tramite gli endpoint Apache Livy, sono necessari determinati permessi e ruoli. Per ulteriori informazioni, consulta Autorizzazioni richieste per carichi di lavoro interattivi.
Autorizzazioni richieste
Oltre alle autorizzazioni richieste per accedere a EMR Serverless, devi aggiungere anche le seguenti autorizzazioni al tuo IAM ruolo per accedere a un endpoint Apache Livy ed eseguire applicazioni:
-
emr-serverless:AccessLivyEndpoints
— concede l'autorizzazione per accedere e connettersi all'applicazione abilitata per Livy specificata come.Resource
È necessaria questa autorizzazione per eseguire REST API le operazioni disponibili dall'endpoint Apache Livy. -
iam:PassRole
— concede l'autorizzazione ad accedere al ruolo di IAM esecuzione durante la creazione della sessione Apache Livy. EMRServerless utilizzerà questo ruolo per eseguire i tuoi carichi di lavoro. -
emr-serverless:GetDashboardForJobRun
— concede l'autorizzazione a generare l'interfaccia utente di Spark Live e i link ai registri dei driver e fornisce l'accesso ai log come parte dei risultati della sessione di 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/*" } ] }
Nozioni di base
Per creare un'applicazione compatibile con Apache Livy, esegui il comando seguente.
aws emr-serverless create-application \ --name
my-application-name
\ --type 'application-type
' \ --release-label <Amazon EMR-release-version> --interactive-configuration '{"livyEndpointEnabled": true}'-
Dopo che EMR Serverless ha creato l'applicazione, avviatela per rendere disponibile l'endpoint Apache Livy.
aws emr-serverless start-application \ --application-id
application-id
Utilizzate il seguente comando per verificare lo stato della vostra applicazione. Una volta raggiunto lo stato
STARTED
, puoi accedere all'endpoint Apache Livy.aws emr-serverless get-application \ --region
<AWS_REGION>
--application-id>application_id>
-
Usa quanto segue URL per accedere all'endpoint:
https://_
<application-id>
_.livy.emr-serverless-services._<AWS_REGION>
_.amazonaws.com
Una volta che l'endpoint è pronto, puoi inviare carichi di lavoro in base al tuo caso d'uso. È necessario firmare ogni richiesta all'endpoint con il SIGv4 protocollo e inserire un'intestazione di autorizzazione. È possibile utilizzare i seguenti metodi per eseguire carichi di lavoro:
-
HTTPclient: è necessario inviare le API operazioni relative agli endpoint Apache Livy con un client personalizzato. HTTP
-
Kernel Sparkmagic: è necessario eseguire localmente il kernel sparkmagic e inviare query interattive con i notebook Jupyter.
HTTPclienti
Per creare una sessione di Apache Livy, devi inserire emr-serverless.session.executionRoleArn
il conf
parametro del corpo della richiesta. L'esempio seguente è un esempio POST /sessions
di richiesta.
{ "kind": "pyspark", "heartbeatTimeoutInSecond": 60, "conf": { "emr-serverless.session.executionRoleArn": "
<executionRoleArn>
" } }
La tabella seguente descrive tutte le operazioni di Apache Livy API disponibili.
APIoperazione | Descrizione |
---|---|
GET/sessioni | Restituisce un elenco di tutte le sessioni interattive attive. |
POST/sessioni | Crea una nuova sessione interattiva tramite spark o pyspark. |
GET/sessioni/ <sessionId > |
Restituisce le informazioni sulla sessione. |
GET/sessions/ <sessionId /sessions//stato |
Restituisce lo stato della sessione. |
DELETE/sessions/ <sessionId > |
Interrompe ed elimina la sessione. |
GET/sessioni/ <sessionId /sessions//dichiarazioni |
Restituisce tutte le istruzioni di una sessione. |
POST/sessioni/ <sessionId /sessions//dichiarazioni |
Esegue un'istruzione in una sessione. |
GET/sessioni/ <sessionId /sessions//dichiarazioni/<statementId > |
Restituisce i dettagli dell'istruzione specificata in una sessione. |
POST/sessions/ <sessionId /sessions//dichiarazioni/<statementId >/dichiarazioni//annulla |
Annulla l'istruzione specificata in questa sessione. |
Invio di richieste all'endpoint Apache Livy
È inoltre possibile inviare richieste direttamente all'endpoint Apache Livy da un client. HTTP In questo modo è possibile eseguire in remoto il codice per i casi d'uso al di fuori di un notebook.
Prima di iniziare a inviare richieste all'endpoint, assicurati di aver installato le seguenti librerie:
pip3 install botocore awscrt requests
Di seguito è riportato un esempio di script Python per inviare HTTP richieste direttamente a un 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 Sparkmagic
Prima di installare sparkmagic, assicurati di aver configurato AWS credenziali nell'istanza in cui vuoi installare sparkmagic
-
Installa sparkmagic seguendo i passaggi di installazione.
Nota che devi solo eseguire i primi quattro passaggi. -
Il kernel sparkmagic supporta autenticatori personalizzati, quindi puoi integrare un autenticatore con il kernel sparkmagic in modo che ogni richiesta venga firmata. SIGv4
-
EMRInstalla l'autenticatore personalizzato Serverless.
pip install emr-serverless-customauth
-
Ora fornisci il percorso dell'autenticatore personalizzato e dell'endpoint URL Apache Livy nel file json di configurazione sparkmagic. Usa il seguente comando per aprire il file di configurazione.
vim ~/.sparkmagic/config.json
Di seguito è riportato un
config.json
file di esempio.{ "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 } -
Avvia Jupyter lab. Dovrebbe utilizzare l'autenticazione personalizzata che hai impostato nell'ultimo passaggio.
-
Puoi quindi eseguire i seguenti comandi del notebook e il tuo codice per iniziare.
%%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, ogni istruzione richiama ciascuna delle API operazioni di Apache Livy tramite l'endpoint Apache Livy configurato. URL È quindi possibile scrivere le istruzioni in base al caso d'uso.
Considerazioni
Prendi in considerazione le seguenti considerazioni quando esegui carichi di lavoro interattivi tramite endpoint Apache Livy.
-
EMRServerless mantiene l'isolamento a livello di sessione utilizzando il caller principal. Il principale chiamante che crea la sessione è l'unico che può accedere a tale sessione. Per un isolamento più granulare, puoi configurare un'identità di origine quando assumi le credenziali. In questo caso, EMR Serverless applica l'isolamento a livello di sessione in base sia al principale chiamante che all'identità di origine. Per ulteriori informazioni sull'identità di origine, consulta Monitoraggio e controllo delle azioni intraprese con i ruoli presunti.
-
Gli endpoint Apache Livy sono supportati dalle versioni EMR Serverless 6.14.0 e successive.
-
Gli endpoint Apache Livy sono supportati solo per il motore Apache Spark.
-
Gli endpoint Apache Livy supportano Scala Spark e. PySpark
-
Per impostazione predefinita,
autoStopConfig
è abilitato nelle tue applicazioni. Ciò significa che le applicazioni si chiudono dopo 15 minuti di inattività. Puoi modificare questa configurazione come parte della tuacreate-application
update-application
richiesta. -
È possibile eseguire fino a 25 sessioni simultanee su una singola applicazione abilitata per endpoint Apache Livy.
-
Per una migliore esperienza di avvio, si consiglia di configurare la capacità preinizializzata per driver ed esecutori.
-
È necessario avviare manualmente l'applicazione prima di connettersi all'endpoint Apache Livy.
-
È necessario disporre di una quota di CPU servizio v sufficiente nel Account AWS per eseguire carichi di lavoro interattivi con l'endpoint Apache Livy. Consigliamo almeno 24 v. CPU
-
Il timeout di sessione predefinito di Apache Livy è di 1 ora. Se non si eseguono istruzioni per un'ora, Apache Livy elimina la sessione e rilascia il driver e gli esecutori. Non è possibile modificare questa configurazione.
-
Solo le sessioni attive possono interagire con un endpoint Apache Livy. Una volta terminata, annullata o terminata la sessione, non è possibile accedervi tramite l'endpoint Apache Livy.