

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 使用多架構映像
<a name="docker-custom-images-multi-architecture"></a>

Amazon EMR on EKS 支援 Amazon Elastic Container Registry (Amazon ECR) 的多架構容器映像。如需詳細資訊，請參閱[為 Amazon ECR 引入多架構容器映像](https://aws.amazon.com/blogs/containers/introducing-multi-architecture-container-images-for-amazon-ecr/)。

Amazon EMR on EKS 自訂映像支援 AWS Graviton 型 EC2 執行個體non-Graviton-based EC2 執行個體。Graviton 型映像會與非 Graviton 型映像儲存在 Amazon ECR 的相同映像儲存庫中。

例如，若要檢查 Docker 清單檔案是否有 6.6.0 映像，請執行下列命令。

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

此處為輸出。`arm64` 架構適用於 Graviton 執行個體。`amd64` 適用於非 Graviton 執行個體。

```
{
   "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"
         }
      }
   ]
}
```

遵循下列步驟來建立多架構映像：

1. 使用以下內容建立 `Dockerfile`，以便可以提取 `arm64` 映像。

   ```
   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. 遵循[為 Amazon ECR 引入多架構容器映像](https://aws.amazon.com/blogs/containers/introducing-multi-architecture-container-images-for-amazon-ecr/)中的說明，以建置多架構映像。
**注意**  
必須在 `arm64` 執行個體上建立 `arm64` 映像。同樣，必須在 `amd64` 執行個體上建置 `amd64` 映像。

   也可以建置多架構映像，而不必使用 Docker `buildx` 命令在每個特定的執行個體類型上建置。如需詳細資訊，請參閱[利用多 CPU 架構支援](https://docs.docker.com/desktop/multi-arch/)。

1. 建立多架構映像後，可以提交具有相同 `spark.kubernetes.container.image` 參數的作業，並將其指向映像。在同時具有 AWS Graviton 型non-Graviton-based EC2 執行個體的異質叢集中，執行個體會根據提取映像的執行個體架構來判斷正確的架構映像。