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.
Wie passen Sie Docker-Images an
Gehen Sie wie folgt vor, um Docker-Images für Amazon EMR auf EKS anzupassen. Die Schritte zeigen Ihnen, wie Sie ein Basis-Image abrufen, es anpassen und veröffentlichen und mithilfe des Images einen Workload einreichen.
Anmerkung
Andere Optionen, die Sie bei der Anpassung von Docker-Images in Betracht ziehen sollten, sind die Anpassung für interaktive Endpunkte, um sicherzustellen, dass Sie über die erforderlichen Abhängigkeiten verfügen, oder die Verwendung von Container-Images mit mehreren Architekturen:
Voraussetzungen
-
Führen Sie die folgenden Einrichten von Amazon EMR in EKS Schritte auf Amazon EMR in EKS aus.
-
Installieren Sie Docker in Ihrer Umgebung. Weitere Informationen finden Sie unter Docker holen
.
Schritt 1: Ein Basis-Image aus Amazon Elastic Container Registry (Amazon ECR) abrufen
Das Basis-Image enthält die Amazon-EMR-Laufzeit und Konnektoren, die für den Zugriff auf andere AWS -Services verwendet werden. Für Amazon EMR 6.9.0 und höher können Sie die Basis-Images aus der Amazon ECR Public Gallery abrufen. Durchsuchen Sie die Galerie nach dem Image-Link und laden Sie das Image in Ihren lokalen Workspace. Für die Amazon EMR-Version 7.9.0 erhalten Sie beispielsweise mit dem folgenden docker pull Befehl das neueste Standard-Basis-Image. Sie können emr-7.9.0:latest durch emr-7.9.0-spark-rapids:latest ersetzen, um das Image abzurufen, das über den Nvidia-RAPIDS-Beschleuniger verfügt. Sie können auch emr-7.9.0:latest durch emr-7.9.0-java11:latest ersetzen, um das Image mit der Java-11-Laufzeit abzurufen.
docker pull public.ecr.aws/emr-on-eks/spark/emr-7.9.0:latest
Wenn Sie das Basis-Image für eine Amazon EMR 6.9.0 oder frühere Versionen abrufen möchten oder wenn Sie es lieber von Amazon-ECR-Registrierungskonten in jeder Region abrufen möchten, gehen Sie wie folgt vor:
-
Wählen Sie einen Basis-Image-URI aus. Der Image-URI folgt diesem Format, wie das folgende
Beispiel zeigt.ECR-registry-account.dkr.ecr.Region.amazonaws.com/spark/container-image-tag895885662937.dkr.ecr.us-west-2.amazonaws.com/spark/emr-6.6.0:latestInformationen zur Auswahl eines Basis-Images in Ihrer Region finden Sie unter Details zur Auswahl einer Basis-Image-URI.
-
Melden Sie sich beim Amazon-ECR-Repository an, in dem das Basis-Image gespeichert ist. Ersetzen Sie
895885662937undus-west-2durch das Amazon ECR-Registrierungskonto und die AWS Region, die Sie ausgewählt haben.aws ecr get-login-password --regionus-west-2| docker login --username AWS --password-stdin895885662937.dkr.ecr.us-west-2.amazonaws.com -
Ziehen Sie das Basis-Image in Ihren lokalen Workspace.
emr-6.6.0:latestErsetzen Sie es durch das Container-Image-Tag, das Sie ausgewählt haben.docker pull895885662937.dkr.ecr.us-west-2.amazonaws.com/spark/emr-6.6.0:latest
Schritt 2: Ein Basis-Image anpassen
Gehen Sie wie folgt vor, um das Basis-Image, das Sie aus Amazon ECR abgerufen haben, anzupassen.
-
Erstellen Sie ein neues
Dockerfilein Ihrem lokalen Workspace. -
Bearbeiten Sie die soeben von Ihnen erstellte
Dockerfileund fügen Sie die folgenden Inhalte hinzu. Dabei wird das Container-ImageDockerfileverwendet, das Sie aus895885662937.dkr.ecr.us-west-2.amazonaws.com/spark/emr-6.6.0:latestabgerufen haben.FROM 895885662937.dkr.ecr.us-west-2.amazonaws.com/spark/emr-6.6.0:latest USER root ### Add customization commands here #### USER hadoop:hadoop -
Fügen Sie Befehle in
Dockerfilehinzu, um das Basis-Image anzupassen. Fügen Sie beispielsweise einen Befehl zur Installation von Python-Bibliotheken hinzu, wie im FolgendenDockerfilegezeigt wird.FROM 895885662937.dkr.ecr.us-west-2.amazonaws.com/spark/emr-6.6.0:latest USER root RUN pip3 install --upgrade boto3 pandas numpy // For python 3 USER hadoop:hadoop -
Führen Sie in demselben Verzeichnis, in dem
Dockerfileerstellt wurde, den folgenden Befehl aus, um das Docker-Image zu erstellen. Geben Sie einen Namen für das Docker-Image ein, z. B.emr6.6_customdocker build -temr6.6_custom.
Schritt 3: (Optional, aber empfohlen) Ein benutzerdefiniertes Image validieren
Wir empfehlen Ihnen, die Kompatibilität Ihres benutzerdefinierten Images zu testen, bevor Sie es veröffentlichen. Sie können die benutzerdefinierte Image-CLI von Amazon EMR in EKS
Anmerkung
Die CLI für benutzerdefinierte Images von Amazon EMR in EKS kann nicht bestätigen, dass Ihr Image fehlerfrei ist. Seien Sie vorsichtig, wenn Sie Abhängigkeiten von den Basis-Images entfernen.
Führen Sie den folgenden Befehl aus, um Ihre Aufgaben zu löschen.
-
Laden Sie Amazon EMR auf der CLI für benutzerdefinierte EKS-Images herunter und installieren Sie es. Weitere Informationen finden Sie im CLI-Installationshandbuch für Amazon EMR in EKS Custom Image
. -
Führen Sie den folgenden Befehl aus, um die Installation zu testen.
emr-on-eks-custom-image --versionHier ein Beispiel für die Ausgabe.
Amazon EMR on EKS Custom Image CLI Version: x.xx -
Führen Sie den folgenden Befehl aus, um Ihre Ressourcen zu löschen.
emr-on-eks-custom-image validate-image -iimage_name-rrelease_version[-timage_type]-
-igibt den lokalen Image-URI an, der validiert werden muss. Dies kann der Image-URI sein, ein beliebiger Name oder Tag, den Sie für Ihr Image definiert haben. -
-rgibt die genaue Release-Version für das Basis-Image an, zum Beispielemr-6.6.0-latest. -
-tgibt den Imagetyp an. Wenn es sich um ein Image-Bild handelt, geben Siesparkein. Der Standardwert istspark. Die aktuelle CLI-Version von Amazon EMR in EKS für benutzerdefinierte Images unterstützt nur Spark-Laufzeit-Images.
Wenn Sie den Befehl erfolgreich ausführen und das benutzerdefinierte Image alle erforderlichen Konfigurationen und Dateistrukturen erfüllt, werden in der zurückgegebenen Ausgabe die Ergebnisse aller Tests angezeigt, wie das folgende Beispiel zeigt.
Amazon EMR on EKS Custom Image Test Version: x.xx ... Checking if docker cli is installed ... Checking Image Manifest [INFO] Image ID: xxx [INFO] Created On: 2021-05-17T20:50:07.986662904Z [INFO] Default User Set to hadoop:hadoop : PASS [INFO] Working Directory Set to /home/hadoop : PASS [INFO] Entrypoint Set to /usr/bin/entrypoint.sh : PASS [INFO] SPARK_HOME is set with value: /usr/lib/spark : PASS [INFO] JAVA_HOME is set with value: /etc/alternatives/jre : PASS [INFO] File Structure Test for spark-jars in /usr/lib/spark/jars: 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 bin-files in /usr/bin: PASS ... Start Running Sample Spark Job [INFO] Sample Spark Job Test with local:///usr/lib/spark/examples/jars/spark-examples.jar : PASS ----------------------------------------------------------------- Overall Custom Image Validation Succeeded. -----------------------------------------------------------------Wenn das benutzerdefinierte Image die erforderlichen Konfigurationen oder Dateistrukturen nicht erfüllt, treten Fehlermeldungen auf. Die zurückgegebene Ausgabe enthält Informationen zu den falschen Konfigurationen oder Dateistrukturen.
-
Schritt 4: Ein benutzerdefiniertes Image veröffentlichen
Führen Sie den folgenden Befehl aus, um Ihre Docker-Images zu löschen.
-
Führen Sie den folgenden Befehl aus, um ein Amazon-ECR-Repository zum Speichern Ihres Docker-Images zu erstellen. Geben Sie einen Namen für Ihr Repository ein, zum Beispiel.
emr6.6_custom_repoErsetzen Sieus-west-2durch Ihre Region.aws ecr create-repository \ --repository-nameemr6.6_custom_repo\ --image-scanning-configuration scanOnPush=true \ --regionus-west-2Weitere Informationen finden Sie unter Erstellen eines Repositorys im Amazon-ECR-Benutzerhandbuch.
-
Führen Sie den folgenden Befehl aus, um Ihre Ressourcen zu löschen.
aws ecr get-login-password --regionus-west-2| docker login --username AWS --password-stdinaws_account_id.dkr.ecr.us-west-2.amazonaws.com.rproxy.govskope.caWeitere Informationen finden Sie unter Authentifizieren bei Ihrer Standardregistrierung im Amazon-ECR-Benutzerhandbuch.
-
Kennzeichnen und veröffentlichen Sie ein Image im von Ihnen erstellten Amazon-ECR-Repository.
Markieren Sie das Image.
docker tagemr6.6_customaws_account_id.dkr.ecr.us-west-2.amazonaws.com/emr6.6_custom_repoÜbertragen Sie das Image per Push.
docker pushaws_account_id.dkr.ecr.us-west-2.amazonaws.com/emr6.6_custom_repoWeitere Informationen finden Sie unter Übertragen eines Images an Amazon ECR im Amazon-ECR-Benutzerhandbuch.
Schritt 5: Einen Spark-Workload mit einem benutzerdefinierten Image in Amazon EMR einreichen
Nachdem ein benutzerdefiniertes Image erstellt und veröffentlicht wurde, können Sie mithilfe eines benutzerdefinierten Images einen Amazon-EMR-in-EKS-Auftrag einreichen.
Erstellen Sie zunächst eine start-job-run-request JSON-Datei und geben Sie den spark.kubernetes.container.image Parameter an, der auf das benutzerdefinierte Bild verweisen soll, wie die folgende JSON-Beispieldatei zeigt.
Anmerkung
Sie können das local://-Schema verwenden, um auf Dateien zu verweisen, die im benutzerdefinierten Image verfügbar sind, wie im folgenden JSON-Snippet mit dem Argument entryPoint gezeigt. Sie können das local://-Schema auch verwenden, um auf Anwendungsabhängigkeiten zu verweisen. Alle Dateien und Abhängigkeiten, auf die mithilfe des local://-Schemas verwiesen wird, müssen bereits im angegebenen Pfad im benutzerdefinierten Image vorhanden sein.
{ "name": "spark-custom-image", "virtualClusterId": "virtual-cluster-id", "executionRoleArn": "execution-role-arn", "releaseLabel": "emr-6.6.0-latest", "jobDriver": { "sparkSubmitJobDriver": { "entryPoint": "local:///usr/lib/spark/examples/jars/spark-examples.jar", "entryPointArguments": [ "10" ], "sparkSubmitParameters": "--class org.apache.spark.examples.SparkPi --conf spark.kubernetes.container.image=123456789012.dkr.ecr.us-west-2.amazonaws.com/emr6.6_custom_repo" } } }
Sie können das benutzerdefinierte Image auch mit applicationConfiguration-Eigenschaften referenzieren, wie das folgende Beispiel zeigt.
{ "name": "spark-custom-image", "virtualClusterId": "virtual-cluster-id", "executionRoleArn": "execution-role-arn", "releaseLabel": "emr-6.6.0-latest", "jobDriver": { "sparkSubmitJobDriver": { "entryPoint": "local:///usr/lib/spark/examples/jars/spark-examples.jar", "entryPointArguments": [ "10" ], "sparkSubmitParameters": "--class org.apache.spark.examples.SparkPi" } }, "configurationOverrides": { "applicationConfiguration": [ { "classification": "spark-defaults", "properties": { "spark.kubernetes.container.image": "123456789012.dkr.ecr.us-west-2.amazonaws.com/emr6.6_custom_repo" } } ] } }
Führen Sie dann den start-job-run-Befehl aus, um den Auftrag zu senden.
aws emr-containers start-job-run --cli-input-json file://./start-job-run-request.json
Ersetzen Sie es in den obigen JSON-Beispielen emr-6.6.0-latest durch Ihre Amazon EMR-Release-Version. Wir empfehlen dringend, die -latest Release-Version zu verwenden, um sicherzustellen, dass die ausgewählte Version die neuesten Sicherheitsupdates enthält. Weitere Informationen zu Amazon-EMR-Releaseversionen und ihren Image-Tags finden Sie unter Details zur Auswahl einer Basis-Image-URI.
Anmerkung
Sie können spark.kubernetes.driver.container.image und spark.kubernetes.executor.container.image verwenden, um ein anderes Image für Treiber- und Executor-Pods anzugeben.