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 EMR serverlosen 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 EMR Amazon-Laufzeitumgebungen möglicherweise nicht allgemein verfügbar.
-
Integriert EMR Serverless in die derzeit etablierten Erstellungs-, Test- und Bereitstellungsprozesse in Ihrem Unternehmen, einschließlich lokaler Entwicklungs- und Testprozesse.
-
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.
EMRServerless bietet Bilder, 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 ECR Amazon-Repository in demselben Verzeichnis AWS-Region , das Sie zum Starten EMR serverloser Anwendungen verwenden. Informationen zum Erstellen eines ECR privaten Amazon-Repositorys finden Sie unter Privates Repository erstellen.
-
Um Benutzern Zugriff auf Ihr ECR Amazon-Repository zu gewähren, fügen Sie Benutzern und Rollen, die EMR serverlose Anwendungen mit Bildern aus diesem Repository erstellen oder aktualisieren, die folgenden Richtlinien hinzu.
{ "Version": "2012-10-17", "Statement": [ { "Sid": "ECRRepositoryListGetPolicy", "Effect": "Allow", "Action": [ "ecr:GetDownloadUrlForLayer", "ecr:BatchGetImage", "ecr:DescribeImages" ], "Resource": "
ecr-repository-arn
" } ] }Weitere Beispiele für ECR identitätsbasierte Richtlinien von Amazon finden Sie unter Beispiele für identitätsbasierte Richtlinien von Amazon Elastic Container Registry.
Schritt 1: Erstellen Sie ein benutzerdefiniertes Image aus serverlosen Basis-Images EMR
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
EMRServerless 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 im Amazon EMR Serverless Image CLI GitHub
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 ECR Amazon-Repository hoch
Übertragen Sie Ihr ECR Amazon-Image mit den folgenden Befehlen in Ihr ECR Amazon-Repository. Stellen Sie sicher, dass Sie über die richtigen IAM Berechtigungen verfügen, um das Bild in Ihr Repository zu übertragen. Weitere Informationen finden Sie unter Bild übertragen im ECRAmazon-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 den Zugriff auf das benutzerdefinierte Image-Repository
Fügen Sie dem ECR Amazon-Repository die folgende Ressourcenrichtlinie hinzu, damit der EMR Serverless Service Principal die get
describe
, und download
-Anfragen von diesem Repository verwenden kann.
{ "Version": "2012-10-17", "Statement": [ { "Sid": "Emr Serverless Custom Image Support", "Effect": "Allow", "Principal": { "Service": "emr-serverless.amazonaws.com" }, "Action": [ "ecr:BatchGetImage", "ecr:DescribeImages", "ecr:GetDownloadUrlForLayer" ], "Condition":{ "StringEquals":{ "aws:SourceArn": "arn:aws:emr-serverless:
region
:aws-account-id
:/applications/application-id
" } } } ] }
Aus Sicherheitsgründen sollten Sie der Repository-Richtlinie einen aws:SourceArn
Bedingungsschlüssel hinzufügen. Der IAM globale Bedingungsschlüssel aws:SourceArn
stellt sicher, dass EMR Serverless das Repository nur für eine Anwendung ARN verwendet. Weitere Informationen zu ECR Amazon-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. -
EMRServerless ignoriert unsere
[CMD]
[ENTRYPOINT]
Anweisungen in der Docker-Datei. Verwenden Sie allgemeine Anweisungen in der Docker-Datei, z. B.[COPY]
, und.[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 5 GB nicht überschreiten.
-
Wenn Sie Binärdateien oder JAR-Dateien in den EMR Amazon-Basis-Images ändern, kann dies zu Fehlern beim Starten von Anwendungen oder Jobs führen.
-
Das ECR Amazon-Repository sollte sich in demselben befinden AWS-Region , das Sie zum Starten EMR serverloser Anwendungen verwenden.