

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

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

Amazon EMR on EKS 支持适用于 Amazon Elastic Container Registry (Amazon ECR) 的多架构容器镜像。有关更多信息，请参阅[适用于 Amazon ECR 的多架构容器镜像简介](https://www.amazonaws.cn/blogs/containers/introducing-multi-architecture-container-images-for-amazon-ecr/)。

EKS 上的 Amazon EMR 自定义映像同时支持 Amazon 基于 Graviton 的 EC2 实例和 EC2 实例。 non-Graviton-based基于 Graviton 的图像与图像存储在 Amazon ECR 中的相同图像存储库中。 non-Graviton-based

例如，要检查 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://www.amazonaws.cn/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` 参数并指向该映像来提交任务。在同时包含 Amazon 基于 Graviton 和 non-Graviton-based EC2 的实例的异构集群中，该实例根据提取映像的实例架构确定正确的架构映像。