为 Flink 和 FluentD 自定义 Docker 映像 - Amazon EMR

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

为 Flink 和 FluentD 自定义 Docker 映像

按照以下步骤,使用 Apache Flink 或 FluentD 映像为 Amazon EMR on EKS 自定义 Docker 映像。其中包括获取基础映像、自定义基础映像、发布基础映像和提交工作负载的技术指导。

在自定义 Docker 映像之前,确保您已完成以下先决条件:

基础映像包含访问其他 AWS 服务所需的 Amazon EMR 运行时和连接器。如果在 Flink 6.14.0 或更高版本中使用 Amazon EMR on EKS,可从 Amazon ECR 公开映像浏览馆获取基础映像。浏览图库以找到映像链接,然后将映像拉到本地 Workspace。例如,对于 Amazon EMR 6.14.0 发行版,以下 docker pull 命令将返回最新的标准基础映像。将 emr-6.14.0:latest 替换为所需的发行版。

docker pull public.ecr.aws/emr-on-eks/flink/emr-6.14.0-flink:latest

以下是 Flink 库映像和 Fluentd 库映像的链接:

下列步骤描述了如何自定义从 Amazon ECR 中拉取的基础映像。

  1. 在您的本地 Workspace 上创建新的 Dockerfile

  2. 编辑 Dockerfile 并添加以下内容。该 Dockerfile 使用您从 public.ecr.aws/emr-on-eks/flink/emr-7.7.0-flink:latest 中拉取的容器映像。

    FROM public.ecr.aws/emr-on-eks/flink/emr-7.7.0-flink:latest USER root ### Add customization commands here #### USER hadoop:hadoop

    如果您使用的是 Fluentd,请使用以下配置。

    FROM public.ecr.aws/emr-on-eks/fluentd/emr-7.7.0:latest USER root ### Add customization commands here #### USER hadoop:hadoop
  3. 将命令添加到 Dockerfile 以自定义基础镜像。以下命令演示了如何安装 Python 库。

    FROM public.ecr.aws/emr-on-eks/flink/emr-7.7.0-flink:latest USER root RUN pip3 install --upgrade boto3 pandas numpy // For python 3 USER hadoop:hadoop
  4. 在创建 DockerFile 的同一目录中,运行以下命令构建 Docker 映像。您在 -t 标志后提供的字段是您自定义的映像名称。

    docker build -t <YOUR_ACCOUNT_ID>.dkr.ecr.<YOUR_ECR_REGION>.amazonaws.com/<ECR_REPO>:<ECR_TAG>

现在,将新的 Docker 映像发布到您的 Amazon ECR 注册表。

  1. 运行以下命令创建一个 Amazon ECR 存储库,来存储您的 Docker 映像。为存储库命名,例如 emr_custom_repo.。有关更多信息,请参阅《Amazon Elastic Container Registry 用户指南》中的创建存储库

    aws ecr create-repository \ --repository-name emr_custom_repo \ --image-scanning-configuration scanOnPush=true \ --region <AWS_REGION>
  2. 运行以下命令对您的默认注册表进行身份验证。有关更多信息,请参阅《Amazon Elastic Container Registry 用户指南》中的对您的默认注册表进行身份验证

    aws ecr get-login-password --region <AWS_REGION> | docker login --username AWS --password-stdin <AWS_ACCOUNT_ID>.dkr.ecr.<YOUR_ECR_REGION>.amazonaws.com
  3. 推送镜像。有关更多信息,请参阅《Amazon Elastic Container Registry 用户指南》中的将映像推送到 Amazon ECR

    docker push <YOUR_ACCOUNT_ID>.dkr.ecr.<YOUR_ECR_REGION>.amazonaws.com/<ECR_REPO>:<ECR_TAG>

要使用自定映像,请对 FlinkDeployment 规范进行以下更改。为此,请在部署规范的 spec.image 行中输入您的映像。

apiVersion: flink.apache.org/v1beta1 kind: FlinkDeployment metadata: name: basic-example spec: flinkVersion: v1_18 image: <YOUR_ACCOUNT_ID>.dkr.ecr.<YOUR_ECR_REGION>.amazonaws.com/<ECR_REPO>:<ECR_TAG> imagePullPolicy: Always flinkConfiguration: taskmanager.numberOfTaskSlots: "1"

要在 Fluentd 作业中使用自定义映像,请在部署规范的 monitoringConfiguration.image 行中输入您的映像。

monitoringConfiguration: image: <YOUR_ACCOUNT_ID>.dkr.ecr.<YOUR_ECR_REGION>.amazonaws.com/<ECR_REPO>:<ECR_TAG> cloudWatchMonitoringConfiguration: logGroupName: flink-log-group logStreamNamePrefix: custom-fluentd