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.
Anpassen eines serverlosen EMR-Images
Ab Amazon EMR 6.9.0 können Sie benutzerdefinierte Images verwenden, um Anwendungsabhängigkeiten und Laufzeitumgebungen mit Amazon EMR Serverless in einen einzigen Container zu packen. Dies vereinfacht die Verwaltung von Workload-Abhängigkeiten und macht Ihre Pakete portabler. Wenn Sie Ihr EMR Serverless-Image anpassen, bietet es die folgenden Vorteile:
-
Installiert und konfiguriert Pakete, die für Ihre Workloads optimiert sind. Diese Pakete sind in der öffentlichen Distribution von Amazon EMR-Laufzeitumgebungen möglicherweise nicht allgemein verfügbar.
-
Integriert EMR Serverless in die derzeit etablierten Build-, Test- und Bereitstellungsprozesse in Ihrem Unternehmen, einschließlich lokaler Entwicklung und Tests.
-
Wendet etablierte Sicherheitsprozesse an, wie z. B. das Scannen von Bildern, die die Compliance- und Governance-Anforderungen in Ihrem Unternehmen erfüllen.
-
Ermöglicht es Ihnen, Ihre eigenen Versionen von JDK und Python für Ihre Anwendungen zu verwenden.
EMR Serverless stellt Images bereit, die Sie als Basis verwenden können, wenn Sie Ihre eigenen Images erstellen. Das Basis-Image stellt die wesentlichen JAR-Dateien, Konfigurationen und Bibliotheken für die Interaktion des Images mit EMR Serverless bereit. Sie finden das Basisbild in der Amazon ECR Public Gallery
Typ | Image |
---|---|
Spark |
|
Hive |
|
Voraussetzungen
Bevor Sie ein benutzerdefiniertes EMR Serverless-Image erstellen, müssen Sie diese Voraussetzungen erfüllen.
-
Erstellen Sie ein Amazon ECR-Repository in demselben Verzeichnis AWS-Region , das Sie zum Starten von EMR Serverless-Anwendungen verwenden. Informationen zum Erstellen eines privaten Amazon ECR-Repositorys finden Sie unter Privates Repository erstellen.
-
Um Benutzern Zugriff auf Ihr Amazon ECR-Repository zu gewähren, fügen Sie Benutzern und Rollen, die EMR Serverless-Anwendungen mit Bildern aus diesem Repository erstellen oder aktualisieren, die folgenden Richtlinien hinzu.
Weitere Beispiele für identitätsbasierte Amazon ECR-Richtlinien finden Sie unter Beispiele für identitätsbasierte Richtlinien von Amazon Elastic Container Registry.
Schritt 1: Erstellen Sie ein benutzerdefiniertes Image aus EMR Serverless-Basisimages
Erstellen Sie zunächst ein DockerfileFROM
Anweisung beginnt, die Ihr bevorzugtes Basis-Image verwendet. Nach der FROM
Anweisung können Sie jede Änderung hinzufügen, die Sie am Image vornehmen möchten. Das Basis-Image legt automatisch den Wert USER
auf festhadoop
. Diese Einstellung verfügt möglicherweise nicht über Berechtigungen für alle Änderungen, die Sie vornehmen. Um das Problem zu umgehen, setzen Sie den USER
Wert aufroot
, ändern Sie Ihr Bild und setzen Sie dann den Wert USER
Zurück aufhadoop:hadoop
. Beispiele für gängige Anwendungsfälle finden Sie unterVerwenden von benutzerdefinierten Images mit EMR Serverless.
# Dockerfile FROM public.ecr.aws/emr-serverless/spark/emr-6.9.0:latest USER root # MODIFICATIONS GO HERE # EMRS will run the image as hadoop USER hadoop:hadoop
Nachdem Sie das Dockerfile haben, erstellen Sie das Image mit dem folgenden Befehl.
# build the docker image docker build . -t
aws-account-id
.dkr.ecr.region
.amazonaws.com/my-repository
[:tag]or[@digest]
Schritt 2: Überprüfen Sie das Image lokal
EMR Serverless bietet ein Offline-Tool, mit dem Sie Ihr benutzerdefiniertes Image statisch überprüfen können, um grundlegende Dateien, Umgebungsvariablen und korrekte Image-Konfigurationen zu validieren. Informationen zur Installation und Ausführung des Tools finden Sie in der Amazon EMR Serverless Image
Führen Sie nach der Installation des Tools den folgenden Befehl aus, um ein Image zu validieren:
amazon-emr-serverless-image \ validate-image -r emr-6.9.0 -t spark \ -i
aws-account-id
.dkr.ecr.region
.amazonaws.com/my-repository
:tag/@digest
Sie sollten eine Ausgabe sehen, die der folgenden ähnelt.
Amazon EMR Serverless - Image CLI Version: 0.0.1 ... Checking if docker cli is installed ... Checking Image Manifest [INFO] Image ID: 9e2f4359cf5beb466a8a2ed047ab61c9d37786c555655fc122272758f761b41a [INFO] Created On: 2022-12-02T07:46:42.586249984Z [INFO] Default User Set to hadoop:hadoop : PASS [INFO] Working Directory Set to : PASS [INFO] Entrypoint Set to /usr/bin/entrypoint.sh : PASS [INFO] HADOOP_HOME is set with value: /usr/lib/hadoop : PASS [INFO] HADOOP_LIBEXEC_DIR is set with value: /usr/lib/hadoop/libexec : PASS [INFO] HADOOP_USER_HOME is set with value: /home/hadoop : PASS [INFO] HADOOP_YARN_HOME is set with value: /usr/lib/hadoop-yarn : PASS [INFO] HIVE_HOME is set with value: /usr/lib/hive : PASS [INFO] JAVA_HOME is set with value: /etc/alternatives/jre : PASS [INFO] TEZ_HOME is set with value: /usr/lib/tez : PASS [INFO] YARN_HOME is set with value: /usr/lib/hadoop-yarn : PASS [INFO] File Structure Test for hadoop-files in /usr/lib/hadoop: PASS [INFO] File Structure Test for hadoop-jars in /usr/lib/hadoop/lib: PASS [INFO] File Structure Test for hadoop-yarn-jars in /usr/lib/hadoop-yarn: PASS [INFO] File Structure Test for hive-bin-files in /usr/bin: PASS [INFO] File Structure Test for hive-jars in /usr/lib/hive/lib: PASS [INFO] File Structure Test for java-bin in /etc/alternatives/jre/bin: PASS [INFO] File Structure Test for tez-jars in /usr/lib/tez: PASS ----------------------------------------------------------------- Overall Custom Image Validation Succeeded. -----------------------------------------------------------------
Schritt 3: Laden Sie das Bild in Ihr Amazon ECR-Repository hoch
Übertragen Sie Ihr Amazon ECR-Image mit den folgenden Befehlen in Ihr Amazon ECR-Repository. Stellen Sie sicher, dass Sie über die richtigen IAM-Berechtigungen verfügen, um das Image in Ihr Repository zu übertragen. Weitere Informationen finden Sie unter Ein Bild übertragen im Amazon ECR-Benutzerhandbuch.
# login to ECR repo aws ecr get-login-password --region region | docker login --username AWS --password-stdin
aws-account-id
.dkr.ecr.region
.amazonaws.com # push the docker image docker pushaws-account-id
.dkr.ecr.region
.amazonaws.com/my-repository
:tag/@digest
Schritt 4: Erstellen oder aktualisieren Sie eine Anwendung mit benutzerdefinierten Bildern
Wählen Sie die AWS Management Console Registerkarte oder AWS CLI Registerkarte aus, je nachdem, wie Sie Ihre Anwendung starten möchten, und führen Sie dann die folgenden Schritte aus.
Schritt 5: Erlauben Sie EMR Serverless, auf das benutzerdefinierte Image-Repository zuzugreifen
Fügen Sie dem Amazon ECR-Repository die folgende Ressourcenrichtlinie hinzu, damit der EMR Serverless Service Principal die get
describe
, und download
-Anfragen aus diesem Repository verwenden kann.
Aus Sicherheitsgründen sollten Sie der Repository-Richtlinie einen aws:SourceArn
Bedingungsschlüssel hinzufügen. Der globale IAM-Bedingungsschlüssel aws:SourceArn
stellt sicher, dass EMR Serverless das Repository nur für einen Anwendungs-ARN verwendet. Weitere Informationen zu den Amazon ECR-Repository-Richtlinien finden Sie unter Privates Repository erstellen.
Überlegungen und Einschränkungen
Wenn Sie mit benutzerdefinierten Images arbeiten, sollten Sie Folgendes beachten:
-
Verwenden Sie das richtige Basis-Image, das dem Typ (Spark oder Hive) und dem Release-Label (z. B.
emr-6.9.0
) für Ihre Anwendung entspricht. -
EMR Serverless ignoriert unsere
[CMD]
[ENTRYPOINT]
Anweisungen in der Docker-Datei. Verwenden Sie allgemeine Anweisungen in der Docker-Datei, z. B., und.[COPY]
[RUN]
[WORKDIR]
-
Sie sollten die Umgebungsvariablen
JAVA_HOME
,, nicht ändernSPARK_HOME
HIVE_HOME
,TEZ_HOME
wenn Sie ein benutzerdefiniertes Image erstellen. -
Benutzerdefinierte Bilder dürfen eine Größe von 10 GB nicht überschreiten.
-
Wenn Sie Binärdateien oder JAR-Dateien in den Amazon EMR-Basisimages ändern, kann dies zu Fehlern beim Starten von Anwendungen oder Jobs führen.
-
Das Amazon ECR-Repository sollte sich in demselben Verzeichnis befinden AWS-Region , das Sie zum Starten von EMR Serverless-Anwendungen verwenden.