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
Tipo | Imagem |
---|---|
Spark |
|
Hive |
|
Pré-requisitos
Antes de criar uma imagem personalizada EMR sem servidor, preencha esses pré-requisitos.
-
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.
-
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 DockerfileFROM
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
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 pushaws-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.
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_HOME
SPARK_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.