

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 von Docker-Images für Amazon EMR in EKS
Benutzerdefiniertes Docker-Image

Sie können benutzerdefinierte Docker-Images mit Amazon EMR in EKS verwenden. Das Anpassen des Amazon EMR in EKS-Runtime-Images bietet die folgenden Vorteile: 
+ Packen Sie Anwendungsabhängigkeiten und Laufzeitumgebung in einen einzigen unveränderlichen Container, der die Portabilität fördert und das Abhängigkeitsmanagement für jeden Workload vereinfacht.
+ Installieren und konfigurieren Sie Pakete, die für Ihre Workloads optimiert sind. Diese Pakete sind in der öffentlichen Distribution von Amazon-EMR-Laufzeiten möglicherweise nicht allgemein verfügbar.
+ Integrieren Sie Amazon EMR in EKS in die derzeit etablierten Erstellungs-, Test- und Bereitstellungsprozesse in Ihrem Unternehmen, einschließlich lokaler Entwicklung und Tests.
+ Wenden Sie etablierte Sicherheitsprozesse an, wie z. B. das Scannen von Images, die die Compliance- und Governance-Anforderungen in Ihrem Unternehmen erfüllen.

**Topics**
+ [

# Wie passen Sie Docker-Images an
](docker-custom-images-steps.md)
+ [

# Details zur Auswahl einer Basis-Image-URI
](docker-custom-images-tag.md)
+ [

# Überlegungen zum Anpassen von Bildern
](docker-custom-images-considerations.md)

# 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.
+ [Voraussetzungen](#docker-custom-images-prereq)
+ [Schritt 1: Ein Basis-Image aus Amazon Elastic Container Registry (Amazon ECR) abrufen](#docker-custom-images-retrieve)
+ [Schritt 2: Ein Basis-Image anpassen](#docker-custom-images-customize)
+ [Schritt 3: (Optional, aber empfohlen) Ein benutzerdefiniertes Image validieren](#docker-custom-images-validate)
+ [Schritt 4: Ein benutzerdefiniertes Image veröffentlichen](#docker-custom-images-publish)
+ [Schritt 5: Einen Spark-Workload mit einem benutzerdefinierten Image in Amazon EMR einreichen](#docker-custom-images-submit)

**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:  
[Docker-Images für interaktive Endpunkte anpassen](docker-custom-images-managed-endpoint.md)
[Arbeiten mit Images mit mehreren Architekturen](docker-custom-images-multi-architecture.md)

## Voraussetzungen

+ Führen Sie die folgenden [Einrichten von Amazon EMR in EKS](setting-up.md) Schritte auf Amazon EMR in EKS aus. 
+ Installieren Sie Docker in Ihrer Umgebung. Weitere Informationen finden Sie unter [Docker holen](https://docs.docker.com/get-docker/).

## 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.12.0 erhalten Sie beispielsweise mit dem folgenden `docker pull` Befehl das neueste Standard-Basis-Image. Sie können `emr-7.12.0:latest` durch `emr-7.12.0-spark-rapids:latest` ersetzen, um das Image abzurufen, das über den Nvidia-RAPIDS-Beschleuniger verfügt. Sie können auch `emr-7.12.0:latest` durch `emr-7.12.0-java11:latest` ersetzen, um das Image mit der Java-11-Laufzeit abzurufen.

```
docker pull public.ecr.aws/emr-on-eks/spark/emr-7.12.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:

1. Wählen Sie einen Basis-Image-URI aus. Der Image-URI folgt diesem Format, wie das folgende `ECR-registry-account.dkr.ecr.Region.amazonaws.com/spark/container-image-tag` Beispiel zeigt.

   ```
   895885662937.dkr.ecr.us-west-2.amazonaws.com/spark/emr-6.6.0:latest
   ```

   Informationen zur Auswahl eines Basis-Images in Ihrer Region finden Sie unter [Details zur Auswahl einer Basis-Image-URI](docker-custom-images-tag.md). 

1. Melden Sie sich beim Amazon-ECR-Repository an, in dem das Basis-Image gespeichert ist. Ersetzen Sie *895885662937* und *us-west-2* durch das Amazon ECR-Registrierungskonto und die AWS Region, die Sie ausgewählt haben. 

   ```
   aws ecr get-login-password --region us-west-2 | docker login --username AWS --password-stdin 895885662937.dkr.ecr.us-west-2.amazonaws.com
   ```

1. Ziehen Sie das Basis-Image in Ihren lokalen Workspace. *emr-6.6.0:latest*Ersetzen Sie es durch das Container-Image-Tag, das Sie ausgewählt haben.

   ```
   docker pull 895885662937.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. 

1. Erstellen Sie ein neues `Dockerfile` in Ihrem lokalen Workspace.

1. Bearbeiten Sie die soeben von Ihnen erstellte `Dockerfile` und fügen Sie die folgenden Inhalte hinzu. Dabei wird das Container-Image `Dockerfile` verwendet, das Sie aus `895885662937.dkr.ecr.us-west-2.amazonaws.com/spark/emr-6.6.0:latest` abgerufen 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
   ```

1. Fügen Sie Befehle in `Dockerfile` hinzu, um das Basis-Image anzupassen. Fügen Sie beispielsweise einen Befehl zur Installation von Python-Bibliotheken hinzu, wie im Folgenden `Dockerfile` gezeigt 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
   ```

1. Führen Sie in demselben Verzeichnis, in dem `Dockerfile` erstellt 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\$1custom* 

   ```
   docker build -t emr6.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](https://github.com/awslabs/amazon-emr-on-eks-custom-image-cli) verwenden, um zu überprüfen, ob Ihr Image über die erforderlichen Dateistrukturen und die richtigen Konfigurationen für die Ausführung auf Amazon EMR in EKS verfügt. 

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

1. 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](https://github.com/awslabs/amazon-emr-on-eks-custom-image-cli/blob/main/installer/assets/INSTALLATION_GUIDE.md).

1. Führen Sie den folgenden Befehl aus, um die Installation zu testen.

   ```
   emr-on-eks-custom-image --version
   ```

   Hier ein Beispiel für die Ausgabe.

   ```
   Amazon EMR on EKS Custom Image CLI
   Version: x.xx
   ```

1. Führen Sie den folgenden Befehl aus, um Ihre Ressourcen zu löschen.

   ```
   emr-on-eks-custom-image validate-image -i image_name -r release_version [-t image_type]
   ```
   + `-i` gibt 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.
   + `-r` gibt die genaue Release-Version für das Basis-Image an, zum Beispiel `emr-6.6.0-latest`.
   + `-t` gibt den Imagetyp an. Wenn es sich um ein Image-Bild handelt, geben Sie `spark` ein. Der Standardwert ist `spark`. 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. 

1. 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\$1custom\$1repo* Ersetzen Sie *us-west-2* durch Ihre Region. 

   ```
   aws ecr create-repository \
       --repository-name emr6.6_custom_repo \
       --image-scanning-configuration scanOnPush=true \
       --region us-west-2
   ```

   Weitere Informationen finden Sie unter [Erstellen eines Repositorys](https://docs.aws.amazon.com/AmazonECR/latest/userguide/getting-started-cli.html#cli-create-repository) im *Amazon-ECR-Benutzerhandbuch*.

1. Führen Sie den folgenden Befehl aus, um Ihre Ressourcen zu löschen.

   ```
   aws ecr get-login-password --region us-west-2 | docker login --username AWS --password-stdin aws_account_id.dkr.ecr.us-west-2.amazonaws.com
   ```

   Weitere Informationen finden Sie unter [Authentifizieren bei Ihrer Standardregistrierung](https://docs.aws.amazon.com/AmazonECR/latest/userguide/getting-started-cli.html#cli-authenticate-registry) im *Amazon-ECR-Benutzerhandbuch*.

1. Kennzeichnen und veröffentlichen Sie ein Image im von Ihnen erstellten Amazon-ECR-Repository. 

   Markieren Sie das Image.

   ```
   docker tag emr6.6_custom aws_account_id.dkr.ecr.us-west-2.amazonaws.com/emr6.6_custom_repo
   ```

   Übertragen Sie das Image per Push.

   ```
   docker push aws_account_id.dkr.ecr.us-west-2.amazonaws.com/emr6.6_custom_repo
   ```

   Weitere Informationen finden Sie unter [Übertragen eines Images an Amazon ECR](https://docs.aws.amazon.com/AmazonECR/latest/userguide/getting-started-cli.html#cli-push-image) 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](docker-custom-images-tag.md). 

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

# Docker-Images für interaktive Endpunkte anpassen


Sie können Docker-Images auch für interaktive Endpunkte anpassen, sodass Sie benutzerdefinierte Basis-Kernel-Images ausführen können. Dadurch können Sie sicherstellen, dass Sie über die Abhängigkeiten verfügen, die Sie benötigen, wenn Sie interaktive Workloads von EMR Studio ausführen.

1. Folgen Sie den oben beschriebenen [Schritten 1–4](https://docs.aws.amazon.com/emr/latest/EMR-on-EKS-DevelopmentGuide/docker-custom-images-steps.html#docker-custom-images-retrieve), um ein Docker-Image anzupassen. Für Amazon-EMR-Versionen 6.9.0 und höher können Sie den Basis-Image-URI von der Amazon ECR Public Gallery abrufen. Für Versionen vor Amazon EMR 6.9.0 können Sie das Image in jedem Amazon-ECR-Registrierungskonto in AWS-Region abrufen, und der einzige Unterschied ist der Basis-Image-URI in Ihrer Docker-Datei. Die Basis-Image-URI folgt dem Format:

   ```
   ECR-registry-account.dkr.ecr.Region.amazonaws.com/notebook-spark/container-image-tag
   ```

   Sie müssen `notebook-spark` im Basis-Image den URI anstelle von `spark` verwenden. Das Basis-Image enthält die Spark-Laufzeit und die Notebook-Kernel, die damit ausgeführt werden. Weitere Informationen zur Auswahl von Regionen und Container-Image-Tags finden Sie unter [Details zur Auswahl einer Basis-Image-URI](docker-custom-images-tag.md). 
**Anmerkung**  
Derzeit werden nur Überschreibungen von Basis-Images unterstützt und die Einführung völlig neuer Kernel anderer Typen als die Basis-Images wird nicht AWS unterstützt.

1. Erstellen Sie einen interaktiven Endpunkt, der mit dem benutzerdefinierten Image verwendet werden kann. 

   Erstellen Sie zunächst eine JSON-Datei mit dem Namen `custom-image-managed-endpoint.json` und den folgenden Inhalten.

   ```
   {
       "name": "endpoint-name",
       "virtualClusterId": "virtual-cluster-id",
       "type": "JUPYTER_ENTERPRISE_GATEWAY",
       "releaseLabel": "emr-6.6.0-latest",
       "executionRoleArn": "execution-role-arn",
       "certificateArn": "certificate-arn",
       "configurationOverrides": {
           "applicationConfiguration": [
               {
                   "classification": "jupyter-kernel-overrides",
                   "configurations": [
                       {
                           "classification": "python3",
                           "properties": {
                               "container-image": "123456789012.dkr.ecr.us-west-2.amazonaws.com/custom-notebook-python:latest"
                           }
                       },
                       {
                           "classification": "spark-python-kubernetes",
                           "properties": {
                               "container-image": "123456789012.dkr.ecr.us-west-2.amazonaws.com/custom-notebook-spark:latest"
                           }
                       }
                   ] 
               }
           ]
       }
   }
   ```

   Erstellen Sie als Nächstes einen interaktiven Endpunkt mit den in der JSON-Datei angegebenen Konfigurationen, wie das folgende Beispiel zeigt.

   ```
   aws emr-containers create-managed-endpoint --cli-input-json custom-image-managed-endpoint.json
   ```

   Weitere Informationen finden Sie unter [Einen interaktiven Endpunkt für Ihren virtuellen Cluster erstellen](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-studio-create-eks-cluster.html#emr-studio-create-managed-endpoint).

1. Stellen Sie über EMR Studio eine Verbindung zum interaktiven Endpunkt her. Weitere Informationen finden Sie unter Herstellen einer [Verbindung über Studio](https://emr-on-eks.workshop.aws/advanced/emr-studio/connecting-from-studio.html).

# Arbeiten mit Images mit mehreren Architekturen


Amazon EMR in EKS unterstützt Multi-Architektur-Container-Images für Amazon Elastic Container Registry (Amazon ECR). Weitere Informationen finden Sie unter [Einführung in Container-Images mit mehreren Architekturen](https://aws.amazon.com/blogs/containers/introducing-multi-architecture-container-images-for-amazon-ecr/) für Amazon ECR.

Benutzerdefinierte Images von Amazon EMR auf EKS unterstützen sowohl AWS Graviton-basierte EC2-Instances als auch EC2-Instances. non-Graviton-based Die Graviton-basierten Bilder werden in denselben Bild-Repositorys in Amazon ECR gespeichert wie Bilder. non-Graviton-based 

Um beispielsweise die Docker-Manifestliste für 6.6.0-Images zu überprüfen, führen Sie den folgenden Befehl aus.

```
docker manifest inspect 895885662937.dkr.ecr.us-west-2.amazonaws.com/spark/emr-6.6.0:latest 
```

Hier wird die Ausgabe gezeigt. Die `arm64`-Architektur ist für die Graviton-Instance vorgesehen. Das `amd64` ist für eine Nicht-Graviton-Instance. 

```
{
   "schemaVersion": 2,
   "mediaType": "application/vnd.docker.distribution.manifest.list.v2+json",
   "manifests": [
      {
         "mediaType": "application/vnd.docker.distribution.manifest.v2+json",
         "size": 1805,
         "digest": "xxx123:6b971cb47d11011ab3d45fff925e9442914b4977ae0f9fbcdcf5cfa99a7593f0",
         "platform": {
            "architecture": "arm64",
            "os": "linux"
         }
      },
      {
         "mediaType": "application/vnd.docker.distribution.manifest.v2+json",
         "size": 1805,
         "digest": "xxx123:6f2375582c9c57fa9838c1d3a626f1b4fc281e287d2963a72dfe0bd81117e52f",
         "platform": {
            "architecture": "amd64",
            "os": "linux"
         }
      }
   ]
}
```

Führen Sie die folgenden Schritte aus, um Multi-Architektur-Images zu erstellen:

1. Erstellen Sie ein `Dockerfile` mit dem folgenden Inhalt, damit Sie das `arm64`-Image abrufen können.

   ```
   FROM --platform=arm64 895885662937.dkr.ecr.us-west-2.amazonaws.com/spark/emr-6.6.0:latest
   USER root
    
   RUN pip3 install boto3 // install customizations here
   USER hadoop:hadoop
   ```

1. Befolgen Sie die Anweisungen unter Einführung von [Multi-Architektur-Container-Images für Amazon ECR](https://aws.amazon.com/blogs/containers/introducing-multi-architecture-container-images-for-amazon-ecr/), um ein Multi-Architektur-Image zu erstellen. 
**Anmerkung**  
Sie müssen `arm64` Images auf `arm64` Instances erstellen. In ähnlicher Weise müssen Sie `amd64` Images auf `amd64` Instances erstellen.

   Mit dem Befehl Docker `buildx` können Sie auch Images mit mehreren Architekturen erstellen, ohne auf jedem spezifischen Instance-Typ aufbauen zu müssen. Weitere Informationen finden Sie unter [Nutzung der Unterstützung mehrerer CPU-Architekturen](https://docs.docker.com/desktop/multi-arch/). 

1. Nachdem Sie das Multiarchitektur-Image erstellt haben, können Sie einen Auftrag mit demselben `spark.kubernetes.container.image` Parameter einreichen und ihn auf das Image verweisen. In einem heterogenen Cluster mit AWS Graviton-basierten und non-Graviton-based EC2-Instances bestimmt die Instance das richtige Architektur-Image auf der Grundlage der Instance-Architektur, die das Image abruft.

# Details zur Auswahl einer Basis-Image-URI


**Anmerkung**  
Für Amazon-EMR-Versionen 6.9.0 und höher können Sie das Basis-Image aus der Amazon ECR Public Gallery abrufen, sodass Sie den Basis-Image-URI nicht wie in den Anweisungen auf dieser Seite beschrieben erstellen müssen. Das Container-Image-Tag für Ihr Basis-Image finden Sie auf der [Seite mit den Versionshinweisen](emr-eks-releases.md) für die entsprechende Version von Amazon EMR in EKS.

Die Basis-Docker-Images die Sie auswählen können werden in der Amazon Elastic Container Registry (Amazon ECR) gespeichert. Die Image-URI folgt diesem Format: `ECR-registry-account.dkr.ecr.Region.amazonaws.com/spark/container-image-tag`, wie das folgende Beispiel zeigt. 

```
895885662937.dkr.ecr.us-west-2.amazonaws.com/spark/emr-7.12.0:latest
```

Der Image-URI für interaktive Endpunkte folgt diesem Format: `ECR-registry-account.dkr.ecr.Region.amazonaws.com/notebook-spark/container-image-tag`, wie das folgende Beispiel zeigt. Sie müssen `notebook-spark` im Basis-Image den URI anstelle von `spark` verwenden. 

```
895885662937.dkr.ecr.us-west-2.amazonaws.com/notebook-spark/emr-7.12.0:latest
```

Ebenso lautet der Image-URI für Nicht-Spark-`python3`-Images für interaktive Endpunkte `ECR-registry-account.dkr.ecr.Region.amazonaws.com/notebook-python/container-image-tag`. Der folgende Beispiel-URI ist korrekt formatiert: 

```
895885662937.dkr.ecr.us-west-2.amazonaws.com/notebook-python/emr-7.12.0:latest
```

Das Container-Image-Tag für Ihr Basis-Image finden Sie auf der [Seite mit den Versionshinweisen](emr-eks-releases.md) für die entsprechende Version von Amazon EMR in EKS.

## Amazon-ECR-Registrierungskonten nach Regionen
Amazon-ECR-Registrierungskonten

Um eine hohe Netzwerklatenz zu vermeiden, rufen Sie ein Basis-Image von Ihrem nächstgelegenen Computer ab AWS-Region. Wählen Sie anhand der folgenden Tabelle das Amazon-ECR-Registrierungskonto aus, das der Region entspricht, aus der Sie das Image abrufen.


| Regionen | Amazon-ECR-Registrierungskonten | 
| --- | --- | 
| ap-east-1 | 736135916053 | 
| ap-northeast-1 | 059004520145 | 
| ap-northeast-2 | 996579266876 | 
| ap-northeast-3 | 705689932349 | 
| ap-southeast-3 | 946962994502 | 
| ap-south-1 | 235914868574 | 
| ap-south-2 | 691480105545 | 
| ap-southeast-1 | 671219180197 | 
| ap-southeast-2 | 038297999601 | 
| ca-central-1 | 351826393999 | 
| eu-central-1 | 107292555468 | 
| eu-central-2 | 314408114945 | 
| eu-north-1 | 830386416364 | 
| eu-west-1 | 483788554619 | 
| eu-west-2 | 118780647275 | 
| eu-west-3 | 307523725174 | 
| eu-south-1 | 238014973495 | 
| eu-south-2 | 350796622945 | 
|  il-central-1 | 395734710648 | 
| me-south-1 | 008085056818 | 
| me-central-1 | 818935616732 | 
| sa-east-1 | 052806832358 | 
| us-gov-west-1 | 299385240661 | 
| us-gov-east-1 | 299393998622 | 
| us-east-1 | 755674844232 | 
| us-east-2 | 711395599931 | 
| us-west-1 | 608033475327 | 
| us-west-2 | 895885662937 | 
| af-south-1 | 358491847878 | 
| cn-north-1 | 068337069695 | 
| cn-northwest-1 | 068420816659 | 

# Überlegungen zum Anpassen von Bildern


Wenn Sie Docker-Images anpassen, können Sie die genaue Laufzeit für Ihren Auftrag detailliert auswählen. Beachten Sie diese bewährten Methoden, wenn Sie diese Funktion verwenden. Dazu gehören Überlegungen zur Sicherheit, Konfiguration und zum Mounten eines Images:
+ Sicherheit ist eine gemeinsame Verantwortung von Ihnen AWS und Ihnen. Sie sind dafür verantwortlich, die Binärdateien, die Sie dem Image hinzufügen, mit Sicherheitspatches zu aktualisieren. Befolgen Sie [Bewährte Methoden für Sicherheit in Amazon EMR in EKS](security-best-practices.md), insbesondere [Die neuesten Sicherheitsupdates für benutzerdefinierte Images erhalten](security-best-practices.md#security-custom-image) und [Das Prinzip der geringsten Berechtigung anwenden](security-best-practices.md#security-least-privilege).
+ Wenn Sie ein Basis-Image anpassen, müssen Sie den Docker-Benutzer `hadoop:hadoop` so ändern, dass die Aufträge nicht mit dem Root-Benutzer ausgeführt werden.
+ Amazon EMR in EKS mountet zur Laufzeit Dateien zusätzlich zu den Konfigurationen für das Image, z. B. `spark-defaults.conf`. Um diese Konfigurationsdateien zu überschreiben, empfehlen wir, den `applicationOverrides`-Parameter während der Auftragsübermittlung zu verwenden und die Dateien im benutzerdefinierten Image nicht direkt zu ändern.
+ Amazon EMR in EKS mountet bestimmte Ordner zur Laufzeit. Alle Änderungen, die Sie an diesen Ordnern vornehmen, sind im Container nicht verfügbar. Wenn Sie eine Anwendung oder deren Abhängigkeiten für benutzerdefinierte Images hinzufügen möchten, empfehlen wir Ihnen, ein Verzeichnis zu wählen, das nicht Teil der folgenden vordefinierten Pfade ist: 
  + `/var/log/fluentd`
  + `/var/log/spark/user`
  + `/var/log/spark/apps`
  + `/mnt`
  + `/tmp`
  + `/home/hadoop`
+ Sie können Ihr benutzerdefiniertes Image in ein beliebiges Docker-kompatibles Repository wie Amazon ECR, Docker Hub oder ein privates Unternehmens-Repository hochladen. Weitere Informationen zur Konfiguration der Amazon-EKS-Cluster-Authentifizierung mit dem ausgewählten Docker-Repository finden Sie unter [Abrufen eines Images aus einer privaten Registrierung](https://kubernetes.io/docs/tasks/configure-pod-container/pull-image-private-registry/). 