Personalizando uma imagem sem EMR servidor - Amazon EMR

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

Personalizando uma imagem sem EMR servidor

A partir do Amazon EMR 6.9.0, você pode usar imagens personalizadas para empacotar dependências de aplicativos e ambientes de execução em um único contêiner com o Amazon Serverless. EMR Isso simplifica a forma como você gerencia as dependências da carga de trabalho e torna seus pacotes mais portáteis. Quando você personaliza sua imagem EMR sem servidor, ela oferece os seguintes benefícios:

  • Instala e configura pacotes otimizados para suas cargas de trabalho. Esses pacotes podem não estar amplamente disponíveis na distribuição pública dos ambientes de EMR execução da Amazon.

  • Integra o EMR Serverless aos processos atuais de criação, teste e implantação estabelecidos em sua organização, incluindo desenvolvimento e teste locais.

  • Aplica processos de segurança estabelecidos, como digitalização de imagens, que atendem aos requisitos de conformidade e governança em sua organização.

  • Permite que você use suas próprias versões do JDK Python para seus aplicativos.

EMRO Serverless fornece imagens que você pode usar como base ao criar suas próprias imagens. A imagem base fornece os jars, a configuração e as bibliotecas essenciais para a imagem interagir com o EMR Serverless. Você pode encontrar a imagem base na Amazon ECR Public Gallery. Use a imagem que corresponda ao seu tipo de aplicativo (Spark ou Hive) e à versão de lançamento. Por exemplo, se você criar um aplicativo na EMR versão 6.9.0 da Amazon, use as imagens a seguir.

Tipo Imagem

Spark

public.ecr.aws/emr-serverless/spark/emr-6.9.0:latest

Hive

public.ecr.aws/emr-serverless/hive/emr-6.9.0:latest

Pré-requisitos

Antes de criar uma imagem personalizada EMR sem servidor, preencha esses pré-requisitos.

  1. Crie um ECR repositório da Amazon no mesmo Região da AWS que você usa para iniciar aplicativos EMR sem servidor. Para criar um repositório ECR privado da Amazon, consulte Criação de um repositório privado.

  2. Para conceder aos usuários acesso ao seu ECR repositório da Amazon, adicione as seguintes políticas aos usuários e funções que criam ou atualizam aplicativos EMR sem servidor com imagens desse repositório.

    { "Version": "2012-10-17", "Statement": [ { "Sid": "ECRRepositoryListGetPolicy", "Effect": "Allow", "Action": [ "ecr:GetDownloadUrlForLayer", "ecr:BatchGetImage", "ecr:DescribeImages" ], "Resource": "ecr-repository-arn" } ] }

    Para obter mais exemplos de políticas ECR baseadas em identidade da Amazon, consulte exemplos de políticas baseadas em identidade do Amazon Elastic Container Registry.

Etapa 1: criar uma imagem personalizada a partir de imagens base EMR sem servidor

Primeiro, crie um Dockerfile que comece com uma FROM instrução que usa sua imagem base preferida. Após a FROM instrução, você pode incluir qualquer modificação que desejar fazer na imagem. A imagem base define automaticamente o valor USER parahadoop. Essa configuração pode não ter permissões para todas as modificações que você inclui. Como solução alternativa, defina o USER pararoot, modifique sua imagem e, em seguida, defina o de USER volta parahadoop:hadoop. Para ver exemplos de casos de uso comuns, consulteUsando imagens personalizadas com o EMR Serverless.

# Dockerfile FROM public.ecr.aws/emr-serverless/spark/emr-6.9.0:latest USER root # MODIFICATIONS GO HERE # EMRS will run the image as hadoop USER hadoop:hadoop

Depois de ter o Dockerfile, crie a imagem com o comando a seguir.

# build the docker image docker build . -t aws-account-id.dkr.ecr.region.amazonaws.com/my-repository[:tag]or[@digest]

Etapa 2: validar a imagem localmente

EMRO Serverless fornece uma ferramenta off-line que pode verificar estaticamente sua imagem personalizada para validar arquivos básicos, variáveis de ambiente e configurações corretas de imagem. Para obter informações sobre como instalar e executar a ferramenta, consulte a Amazon EMR Serverless Image. CLI GitHub

Depois de instalar a ferramenta, execute o comando a seguir para validar uma imagem:

amazon-emr-serverless-image \ validate-image -r emr-6.9.0 -t spark \ -i aws-account-id.dkr.ecr.region.amazonaws.com/my-repository:tag/@digest

Você deve ver uma saída semelhante à seguinte.

Amazon EMR Serverless - Image CLI Version: 0.0.1 ... Checking if docker cli is installed ... Checking Image Manifest [INFO] Image ID: 9e2f4359cf5beb466a8a2ed047ab61c9d37786c555655fc122272758f761b41a [INFO] Created On: 2022-12-02T07:46:42.586249984Z [INFO] Default User Set to hadoop:hadoop : PASS [INFO] Working Directory Set to : PASS [INFO] Entrypoint Set to /usr/bin/entrypoint.sh : PASS [INFO] HADOOP_HOME is set with value: /usr/lib/hadoop : PASS [INFO] HADOOP_LIBEXEC_DIR is set with value: /usr/lib/hadoop/libexec : PASS [INFO] HADOOP_USER_HOME is set with value: /home/hadoop : PASS [INFO] HADOOP_YARN_HOME is set with value: /usr/lib/hadoop-yarn : PASS [INFO] HIVE_HOME is set with value: /usr/lib/hive : PASS [INFO] JAVA_HOME is set with value: /etc/alternatives/jre : PASS [INFO] TEZ_HOME is set with value: /usr/lib/tez : PASS [INFO] YARN_HOME is set with value: /usr/lib/hadoop-yarn : 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 hadoop-yarn-jars in /usr/lib/hadoop-yarn: PASS [INFO] File Structure Test for hive-bin-files in /usr/bin: PASS [INFO] File Structure Test for hive-jars in /usr/lib/hive/lib: PASS [INFO] File Structure Test for java-bin in /etc/alternatives/jre/bin: PASS [INFO] File Structure Test for tez-jars in /usr/lib/tez: PASS ----------------------------------------------------------------- Overall Custom Image Validation Succeeded. -----------------------------------------------------------------

Etapa 3: Faça o upload da imagem para o seu ECR repositório da Amazon

Envie sua ECR imagem da Amazon para o ECR repositório da Amazon com os seguintes comandos. Verifique se você tem as IAM permissões corretas para enviar a imagem para o seu repositório. Para obter mais informações, consulte Como enviar uma imagem no Guia do ECR usuário da Amazon.

# login to ECR repo aws ecr get-login-password --region region | docker login --username AWS --password-stdin aws-account-id.dkr.ecr.region.amazonaws.com # push the docker image docker push aws-account-id.dkr.ecr.region.amazonaws.com/my-repository:tag/@digest

Etapa 4: criar ou atualizar um aplicativo com imagens personalizadas

Selecione o AWS Management Console aba ou AWS CLI separe a guia de acordo com a forma como você deseja iniciar seu aplicativo e, em seguida, conclua as etapas a seguir.

Console
  1. Faça login no console do EMR Studio em https://console.aws.amazon.com/emr. Navegue até seu aplicativo ou crie um novo aplicativo com as instruções em Criar um aplicativo.

  2. Para especificar imagens personalizadas ao criar ou atualizar um aplicativo EMR sem servidor, selecione Configurações personalizadas nas opções de configuração do aplicativo.

  3. Na seção Configurações de imagem personalizada, marque a caixa de seleção Usar a imagem personalizada com este aplicativo.

  4. Cole a ECR imagem da Amazon URI no URI campo Imagem. EMRO Serverless usa essa imagem para todos os tipos de trabalhadores do aplicativo. Como alternativa, você pode escolher imagens personalizadas diferentes e colar ECR imagens diferentes da Amazon URIs para cada tipo de trabalhador.

CLI
  • Crie um aplicativo com o image-configuration parâmetro. EMRO Serverless aplica essa configuração a todos os tipos de trabalhadores.

    aws emr-serverless create-application \ --release-label emr-6.9.0 \ --type SPARK \ --image-configuration '{ "imageUri": "aws-account-id.dkr.ecr.region.amazonaws.com/my-repository:tag/@digest" }'

    Para criar um aplicativo com configurações de imagem diferentes para cada tipo de trabalhador, use o worker-type-specifications parâmetro.

    aws emr-serverless create-application \ --release-label emr-6.9.0 \ --type SPARK \ --worker-type-specifications '{ "Driver": { "imageConfiguration": { "imageUri": "aws-account-id.dkr.ecr.region.amazonaws.com/my-repository:tag/@digest" } }, "Executor" : { "imageConfiguration": { "imageUri": "aws-account-id.dkr.ecr.region.amazonaws.com/my-repository:tag/@digest" } } }'

    Para atualizar um aplicativo, use o image-configuration parâmetro. EMRO Serverless aplica essa configuração a todos os tipos de trabalhadores.

    aws emr-serverless update-application \ --application-id application-id \ --image-configuration '{ "imageUri": "aws-account-id.dkr.ecr.region.amazonaws.com/my-repository:tag/@digest" }'

Etapa 5: permitir que o EMR Serverless acesse o repositório de imagens personalizado

Adicione a seguinte política de recursos ao ECR repositório da Amazon para permitir que o responsável pelo serviço EMR Serverless use as download solicitaçõesget,describe, e desse repositório.

{ "Version": "2012-10-17", "Statement": [ { "Sid": "Emr Serverless Custom Image Support", "Effect": "Allow", "Principal": { "Service": "emr-serverless.amazonaws.com" }, "Action": [ "ecr:BatchGetImage", "ecr:DescribeImages", "ecr:GetDownloadUrlForLayer" ], "Condition":{ "StringEquals":{ "aws:SourceArn": "arn:aws:emr-serverless:region:aws-account-id:/applications/application-id" } } } ] }

Como prática recomendada de segurança, adicione uma chave de aws:SourceArn condição à política do repositório. A chave de condição IAM global aws:SourceArn garante que o EMR Serverless use o repositório somente para um aplicativo. ARN Para obter mais informações sobre as políticas de ECR repositórios da Amazon, consulte Criação de um repositório privado.

Considerações e limitações

Ao trabalhar com imagens personalizadas, considere o seguinte:

  • Use a imagem base correta que corresponda ao tipo (Spark ou Hive) e à etiqueta de lançamento (por exemplo,emr-6.9.0) do seu aplicativo.

  • EMRO Serverless [CMD] ignora nossas [ENTRYPOINT] instruções no arquivo Docker. Use instruções comuns no arquivo Docker, como [COPY][RUN], e. [WORKDIR]

  • Você não deve modificar as variáveis de ambiente JAVA_HOMESPARK_HOME,HIVE_HOME,, TEZ_HOME ao criar uma imagem personalizada.

  • As imagens personalizadas não podem exceder 5 GB de tamanho.

  • Se você modificar binários ou jars nas imagens EMR básicas da Amazon, isso poderá causar falhas no lançamento de aplicativos ou trabalhos.

  • O ECR repositório da Amazon deve estar no mesmo Região da AWS que você usa para iniciar aplicativos EMR sem servidor.