Anpassen eines EMR serverlosen Images - Amazon EMR

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. Verwenden Sie das Image, das Ihrem Anwendungstyp (Spark oder Hive) und Ihrer Release-Version entspricht. Wenn Sie beispielsweise eine Anwendung auf Amazon EMR Version 6.9.0 erstellen, verwenden Sie die folgenden Bilder.

Typ Image

Spark

public.ecr.aws/emr-serverless/spark/emr-6.9.0:latest

Hive

public.ecr.aws/emr-serverless/hive/emr-6.9.0:latest

Voraussetzungen

Bevor Sie ein benutzerdefiniertes EMR Serverless-Image erstellen, müssen Sie diese Voraussetzungen erfüllen.

  1. 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.

  2. 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 Dockerfile, das mit einer FROM 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 push aws-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.

Console
  1. Melden Sie sich bei der EMR Studio-Konsole unter https://console.aws.amazon.com/emr an. Navigieren Sie zu Ihrer Anwendung, oder erstellen Sie mithilfe der Anweisungen unter Anwendung erstellen eine neue Anwendung.

  2. Um beim Erstellen oder Aktualisieren einer EMR serverlosen Anwendung benutzerdefinierte Images anzugeben, wählen Sie in den Einrichtungsoptionen der Anwendung die Option Benutzerdefinierte Einstellungen aus.

  3. Aktivieren Sie im Abschnitt Benutzerdefinierte Image-Einstellungen das Kontrollkästchen Benutzerdefiniertes Image mit dieser Anwendung verwenden.

  4. Fügen Sie das ECR Amazon-Bild URI in das URI Feld Bild ein. EMRServerless verwendet dieses Image für alle Worker-Typen der Anwendung. Alternativ können Sie Verschiedene benutzerdefinierte Bilder auswählen und URIs für jeden Mitarbeitertyp ein anderes ECR Amazon-Bild einfügen.

CLI
  • Erstellen Sie eine Anwendung mit dem image-configuration Parameter. EMRServerless wendet diese Einstellung auf alle Worker-Typen an.

    aws emr-serverless create-application \ --release-label emr-6.9.0 \ --type SPARK \ --image-configuration '{ "imageUri": "aws-account-id.dkr.ecr.region.amazonaws.com/my-repository:tag/@digest" }'

    Verwenden Sie den worker-type-specifications Parameter, um eine Anwendung mit unterschiedlichen Image-Einstellungen für jeden Worker-Typ zu erstellen.

    aws emr-serverless create-application \ --release-label emr-6.9.0 \ --type SPARK \ --worker-type-specifications '{ "Driver": { "imageConfiguration": { "imageUri": "aws-account-id.dkr.ecr.region.amazonaws.com/my-repository:tag/@digest" } }, "Executor" : { "imageConfiguration": { "imageUri": "aws-account-id.dkr.ecr.region.amazonaws.com/my-repository:tag/@digest" } } }'

    Verwenden Sie den image-configuration Parameter, um eine Anwendung zu aktualisieren. EMRServerless wendet diese Einstellung auf alle Worker-Typen an.

    aws emr-serverless update-application \ --application-id application-id \ --image-configuration '{ "imageUri": "aws-account-id.dkr.ecr.region.amazonaws.com/my-repository:tag/@digest" }'

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 getdescribe, 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 UmgebungsvariablenJAVA_HOME,,, nicht ändern SPARK_HOMEHIVE_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.