Personalización de una imagen de EMR sin servidor
A partir de Amazon EMR 6.9.0, utilice 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. Estos paquetes no están ampliamente disponibles en la distribución pública de los entornos de tiempo 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 cuando crea 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 la misma Región de AWS que utiliza para lanzar las aplicaciones EMR sin servidor. 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.
Para ver más ejemplos de políticas basadas en identidad de Amazon ECR, consulte Amazon Elastic Container Registry identity-based policy examples.
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, incluya cualquier modificación que desee realizar en la imagen. La imagen base establece automáticamente el USER en hadoop. Esta configuración no tiene 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 consultar 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 runs 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 . -taws-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 de Amazon EMR sin servidor en 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 \ -iaws-account-id.dkr.ecr.region.amazonaws.com/my-repository:tag/@digest
Aparecerá una salida similar a la siguiente.
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-stdinaws-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 pestaña Consola de administración de AWS o la pestaña AWS CLI según la forma en que desee iniciar 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.
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 modifique las variables de entorno
JAVA_HOME,SPARK_HOME,HIVE_HOME,TEZ_HOMEcuando cree 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 la misma Región de AWS que utiliza para lanzar las aplicaciones EMR sin servidor.