Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.
Personalización de una imagen de EMR sin servidor
A partir de Amazon EMR 6.9.0, puede usar imágenes personalizadas para empaquetar dependencias de aplicaciones y entornos de tiempo de ejecución en un único contenedor con Amazon EMR sin servidor. Esto simplifica la forma en que administra las dependencias de la carga de trabajo y hace que sus paquetes sean más portátiles. Cuando personaliza su imagen de EMR sin servidor, ofrece las siguientes ventajas:
-
Instale y configure paquetes que se hayan optimizado para sus cargas de trabajo. Es posible que estos paquetes no estén ampliamente disponibles en la distribución pública de los entornos de tiempos de ejecución de Amazon EMR.
-
Integra EMR sin servidor con los procesos de compilación, prueba e implementación establecidos actualmente en su organización, incluido el desarrollo y las pruebas locales.
-
Aplica procesos de seguridad establecidos, como el escaneo de imágenes, que cumplan con los requisitos de cumplimiento y gobernanza de su organización.
-
Le permite usar sus propias versiones de JDK y Python para sus aplicaciones.
EMR sin servidor proporciona imágenes que puede utilizar como base al crear sus propias imágenes. La imagen base proporciona los jars, la configuración y las bibliotecas esenciales para que la imagen interactúe con EMR sin servidor. Puede encontrar la imagen base en la Galería pública de Amazon ECR
Tipo | Imagen |
---|---|
Spark |
|
Hive |
|
Requisitos previos
Antes de crear una imagen personalizada de EMR sin servidor, complete estos requisitos previos.
-
Cree un repositorio de Amazon ECR en el mismo Región de AWS que utiliza para lanzar las aplicaciones EMR Serverless. Para crear un repositorio de Amazon ECR privado, consulte Creación de un repositorio privado.
-
Para conceder a los usuarios acceso a su repositorio de Amazon ECR, añada las siguientes políticas a los usuarios y roles que crean o actualizan aplicaciones EMR sin servidor con imágenes de este repositorio.
{ "Version": "2012-10-17", "Statement": [ { "Sid": "ECRRepositoryListGetPolicy", "Effect": "Allow", "Action": [ "ecr:GetDownloadUrlForLayer", "ecr:BatchGetImage", "ecr:DescribeImages" ], "Resource": "
ecr-repository-arn
" } ] }Para ver más ejemplos de políticas basadas en identidad de Amazon ECR, consulte Ejemplos de políticas basadas en identidad de Amazon Elastic Container Registry.
Paso 1: cree una imagen personalizada a partir de imágenes base de EMR sin servidor
En primer lugar, cree un DockerfileFROM
que utilice la imagen base que prefiera. Después de la instrucción FROM
, puede incluir cualquier modificación que desee realizar en la imagen. La imagen base establece automáticamente el USER
en hadoop
. Es posible que esta configuración no tenga permisos para todas las modificaciones que incluya. Como solución alternativa, establezca el USER
en root
, modifique la imagen y, a continuación, establezca el USER
de nuevo en hadoop:hadoop
. Para ver ejemplos de casos de uso comunes, consulte Uso de imágenes personalizadas con EMR sin servidor.
# 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
Una vez tenga el Dockerfile, compile la imagen con el siguiente comando.
# build the docker image docker build . -t
aws-account-id
.dkr.ecr.region
.amazonaws.com/my-repository
[:tag]or[@digest]
Paso 2: valide la imagen localmente
EMR sin servidor proporciona una herramienta sin conexión que puede comprobar estáticamente su imagen personalizada para validar los archivos básicos, las variables de entorno y las configuraciones de imagen correctas. Para obtener información sobre cómo instalar y ejecutar la herramienta, consulte la CLI de imágenes sin servidor de Amazon EMR. GitHub
Una vez instalada la herramienta, ejecute el siguiente comando para validar una imagen:
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
Debería ver un resultado similar a este.
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. -----------------------------------------------------------------
Paso 3: cargue la imagen en su repositorio de Amazon ECR
Inserte la imagen de Amazon ECR en su repositorio de Amazon ERC con los siguientes comandos. Asegúrese de tener los permisos de IAM correctos para enviar la imagen a su repositorio. Para obtener más información, consulte Insertar una imagen en la Guía del usuario de Amazon ECR.
# 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
Paso 4: cree o actualice una aplicación con imágenes personalizadas
Elija la AWS Management Console pestaña o AWS CLI pestaña según cómo desee lanzar la aplicación y, a continuación, complete los siguientes pasos.
Paso 5: permita que EMR sin servidor acceda al repositorio de imágenes personalizado
Añada la siguiente política de recursos al repositorio de Amazon ECR para permitir que la entidad principal del servicio EMR sin servidor utilice las solicitudes get
, describe
y download
desde este repositorio.
{ "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áctica recomendada de seguridad, agregue una clave de condición aws:SourceArn
a la política del repositorio. La clave de condición global de IAM aws:SourceArn
garantiza que EMR sin servidor utilice el repositorio solo para un ARN de aplicación. Para obtener más información sobre las políticas de repositorios de Amazon ECR, consulte Creación de un repositorio privado.
Consideraciones y limitaciones
Cuando trabaje con imágenes personalizadas, tenga en cuenta lo siguiente:
-
Utilice la imagen base correcta que coincida con el tipo (Spark o Hive) y la etiqueta de versión (por ejemplo,
emr-6.9.0
) de su aplicación. -
EMR sin servidor ignora las instrucciones
[ENTRYPOINT]
o[CMD]
en el archivo Docker. Utilice las instrucciones comunes en el archivo Docker, como,[COPY]
,[RUN]
y[WORKDIR]
. -
No debe modificar las variables de entorno
JAVA_HOME
,SPARK_HOME
,HIVE_HOME
,TEZ_HOME
al crear una imagen personalizada. -
Las imágenes personalizadas no pueden superar los 10 GB de tamaño.
-
Si modifica archivos binarios o jars en las imágenes base de Amazon EMR, es posible que se produzcan errores al iniciar la aplicación o el trabajo.
-
El repositorio de Amazon ECR debe estar en el mismo lugar Región de AWS que utiliza para lanzar las aplicaciones EMR Serverless.