Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.
Führen Sie interaktive Workloads mit EMR Serverless über einen Apache Livy-Endpunkt aus
Mit den Amazon EMR-Versionen 6.14.0 und höher können Sie einen Apache Livy-Endpunkt erstellen und aktivieren und gleichzeitig eine serverlose EMR-Anwendung erstellen und interaktive Workloads über Ihre selbst gehosteten Notebooks oder mit einem benutzerdefinierten Client ausführen. Ein Apache Livy-Endpunkt bietet die folgenden Vorteile:
-
Sie können über Jupyter-Notebooks eine sichere Verbindung zu einem Apache Livy-Endpunkt herstellen und Apache Spark-Workloads mit der REST-Schnittstelle von Apache Livy verwalten.
-
Verwenden Sie die Apache Livy REST-API-Operationen für interaktive Webanwendungen, die Daten aus Apache Spark-Workloads verwenden.
Voraussetzungen
Um einen Apache Livy-Endpunkt mit EMR Serverless zu verwenden, müssen Sie die folgenden Anforderungen erfüllen:
-
Führen Sie die Schritte unter Erste Schritte mit Amazon EMR Serverless aus.
-
Um interaktive Workloads über Apache Livy-Endpunkte auszuführen, benötigen Sie bestimmte Berechtigungen und Rollen. Weitere Informationen finden Sie unter Erforderliche Berechtigungen für interaktive Workloads.
Erforderliche Berechtigungen
Zusätzlich zu den erforderlichen Berechtigungen für den Zugriff auf EMR Serverless müssen Sie Ihrer IAM-Rolle auch die folgenden Berechtigungen hinzufügen, um auf einen Apache Livy-Endpunkt zuzugreifen und Anwendungen auszuführen:
-
emr-serverless:AccessLivyEndpoints
— erteilt die Erlaubnis, auf die Livy-fähige Anwendung, die Sie angeben, zuzugreifen und eine Verbindung zu ihr herzustellen.Resource
Sie benötigen diese Berechtigung, um die REST-API-Operationen auszuführen, die vom Apache Livy-Endpunkt aus verfügbar sind. -
iam:PassRole
— erteilt die Erlaubnis, während der Erstellung der Apache Livy-Sitzung auf die IAM-Ausführungsrolle zuzugreifen. EMR Serverless verwendet diese Rolle, um Ihre Workloads auszuführen. -
emr-serverless:GetDashboardForJobRun
— erteilt die Genehmigung zur Generierung der Links zur Benutzeroberfläche von Spark Live und zum Treiberprotokoll und gewährt Zugriff auf die Protokolle als Teil der Apache Livy-Sitzungsergebnisse.
{ "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/*" } ] }
Erste Schritte
Gehen Sie wie folgt vor, um eine Apache Livy-fähige Anwendung zu erstellen und auszuführen.
Führen Sie den folgenden Befehl aus, um eine Apache Livy-fähige Anwendung zu erstellen.
aws emr-serverless create-application \ --name
my-application-name
\ --type 'application-type
' \ --release-label <Amazon EMR-release-version> --interactive-configuration '{"livyEndpointEnabled": true}'-
Nachdem EMR Serverless Ihre Anwendung erstellt hat, starten Sie die Anwendung, um den Apache Livy-Endpunkt verfügbar zu machen.
aws emr-serverless start-application \ --application-id
application-id
Verwenden Sie den folgenden Befehl, um zu überprüfen, ob der Status Ihrer Anwendung stimmt. Sobald der Status erreicht ist
STARTED
, können Sie auf den Apache Livy-Endpunkt zugreifen.aws emr-serverless get-application \ --region
<AWS_REGION>
--application-id>application_id>
-
Verwenden Sie die folgende URL, um auf den Endpunkt zuzugreifen:
https://_
<application-id>
_.livy.emr-serverless-services._<AWS_REGION>
_.amazonaws.com
Sobald der Endpunkt bereit ist, können Sie Workloads auf der Grundlage Ihres Anwendungsfalls einreichen. Sie müssen jede Anfrage an den Endpunkt mit dem SIGv4 Protokoll signieren und einen Autorisierungsheader übergeben. Sie können die folgenden Methoden verwenden, um Workloads auszuführen:
-
HTTP-Client — Sie müssen Ihre Apache Livy-Endpunkt-API-Operationen mit einem benutzerdefinierten HTTP-Client einreichen.
-
Sparkmagic-Kernel — Sie müssen den Sparkmagic-Kernel lokal ausführen und interaktive Abfragen mit Jupyter-Notebooks einreichen.
HTTP-Clients
Um eine Apache Livy-Sitzung zu erstellen, müssen Sie den Parameter Ihres Anfragetextes eingebenemr-serverless.session.executionRoleArn
. conf
Das folgende Beispiel ist eine POST /sessions
Beispielanforderung.
{ "kind": "pyspark", "heartbeatTimeoutInSecond": 60, "conf": { "emr-serverless.session.executionRoleArn": "
<executionRoleArn>
" } }
In der folgenden Tabelle werden alle verfügbaren Apache Livy API-Operationen beschrieben.
API-Operation | Beschreibung |
---|---|
GET /sessions | Gibt eine Liste aller aktiven interaktiven Sitzungen zurück. |
POST /Sessions | Erzeugt eine neue interaktive Sitzung über Spark oder Pyspark. |
GET /sessions/ < > sessionId |
Gibt die Sitzungsinformationen zurück. |
GET /sessions/ < >/state sessionId |
Gibt den Status der Sitzung zurück. |
LÖSCHE /sessions/ < > sessionId |
Stoppt und löscht die Sitzung. |
GET /sessions/ < >/statements sessionId |
Gibt alle Anweisungen in einer Sitzung zurück. |
POST /sessions/ < >/statements sessionId |
Führt eine Anweisung in einer Sitzung aus. |
GET /sessions/ < >/statements/< > sessionId statementId |
Gibt die Details der angegebenen Anweisung in einer Sitzung zurück. |
POST /sessions/ < >/statements/< >/cancel sessionId statementId |
Bricht die angegebene Anweisung in dieser Sitzung ab. |
Anfragen an den Apache Livy-Endpunkt senden
Sie können Anfragen auch direkt von einem HTTP-Client an den Apache Livy-Endpunkt senden. Auf diese Weise können Sie Code für Ihre Anwendungsfälle außerhalb eines Notebooks remote ausführen.
Bevor Sie Anfragen an den Endpunkt senden können, stellen Sie sicher, dass Sie die folgenden Bibliotheken installiert haben:
pip3 install botocore awscrt requests
Im Folgenden finden Sie ein Python-Skript zum direkten Senden von HTTP-Anfragen an einen Endpunkt:
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())
Sparkmagic-Kernel
Bevor Sie Sparkmagic installieren, stellen Sie sicher, dass Sie AWS Anmeldeinformationen für die Instanz konfiguriert haben, in der Sie Sparkmagic installieren möchten
-
Installieren Sie sparkmagic, indem Sie die Installationsschritte befolgen.
Beachten Sie, dass Sie nur die ersten vier Schritte ausführen müssen. -
Der Sparkmagic-Kernel unterstützt benutzerdefinierte Authentifikatoren, sodass Sie einen Authenticator in den Sparkmagic-Kernel integrieren können, sodass jede Anfrage signiert wird. SIGv4
-
Installieren Sie den benutzerdefinierten EMR Serverless Authenticator.
pip install emr-serverless-customauth
-
Geben Sie nun den Pfad zum benutzerdefinierten Authentifikator und die Apache Livy-Endpunkt-URL in der Sparkmagic-Konfigurations-JSON-Datei an. Verwenden Sie den folgenden Befehl, um die Konfigurationsdatei zu öffnen.
vim ~/.sparkmagic/config.json
Im Folgenden finden Sie eine
config.json
Beispieldatei.{ "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 } -
Starten Sie Jupyter Lab. Es sollte die benutzerdefinierte Authentifizierung verwenden, die Sie im letzten Schritt eingerichtet haben.
-
Sie können dann die folgenden Notebook-Befehle und Ihren Code ausführen, um loszulegen.
%%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
Intern ruft jede Anweisung jede der Apache Livy-API-Operationen über die konfigurierte Apache Livy-Endpunkt-URL auf. Anschließend können Sie Ihre Anweisungen entsprechend Ihrem Anwendungsfall schreiben.
Überlegungen
Beachten Sie die folgenden Überlegungen, wenn Sie interaktive Workloads über Apache Livy-Endpunkte ausführen.
-
EMR Serverless hält die Isolierung auf Sitzungsebene mithilfe des Anruferprinzipals aufrecht. Der Anruferprinzipal, der die Sitzung erstellt, ist der einzige, der auf diese Sitzung zugreifen kann. Für eine detailliertere Isolierung können Sie eine Quellidentität konfigurieren, wenn Sie Anmeldeinformationen annehmen. In diesem Fall erzwingt EMR Serverless eine Isolierung auf Sitzungsebene, die sowohl auf dem Anruferprinzipal als auch auf der Quellidentität basiert. Weitere Informationen zur Quellidentität finden Sie unter Überwachen und Steuern von Aktionen, die mit übernommenen Rollen ergriffen wurden.
-
Apache Livy-Endpunkte werden mit den EMR Serverless-Versionen 6.14.0 und höher unterstützt.
-
Apache Livy-Endpunkte werden nur für die Apache Spark-Engine unterstützt.
-
Apache Livy-Endpunkte unterstützen Scala Spark und. PySpark
-
autoStopConfig
Ist standardmäßig in Ihren Anwendungen aktiviert. Das bedeutet, dass Anwendungen nach 15 Minuten Inaktivität heruntergefahren werden. Sie können diese Konfiguration im Rahmen Ihrercreate-application
update-application
PR-Anfrage ändern. -
Sie können bis zu 25 gleichzeitige Sitzungen auf einer einzigen Apache Livy-Endpoint-fähigen Anwendung ausführen.
-
Für ein optimales Starterlebnis empfehlen wir, die vorinitialisierte Kapazität für Treiber und Executoren zu konfigurieren.
-
Sie müssen Ihre Anwendung manuell starten, bevor Sie eine Verbindung zum Apache Livy-Endpunkt herstellen können.
-
Sie müssen über ein ausreichendes vCPU-Dienstkontingent verfügen, AWS-Konto um interaktive Workloads mit dem Apache Livy-Endpunkt ausführen zu können. Wir empfehlen mindestens 24 vCPU.
-
Das standardmäßige Apache Livy-Sitzungstimeout beträgt 1 Stunde. Wenn Sie Anweisungen eine Stunde lang nicht ausführen, löscht Apache Livy die Sitzung und gibt den Treiber und die Executoren frei. Sie können diese Konfiguration nicht ändern.
-
Nur aktive Sitzungen können mit einem Apache Livy-Endpunkt interagieren. Sobald die Sitzung beendet, abgebrochen oder beendet wurde, können Sie nicht mehr über den Apache Livy-Endpunkt darauf zugreifen.