Personalización de una imagen de EMR sin servidor - Amazon EMR

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. Utilice la imagen que coincida con el tipo de aplicación (Spark o Hive) y la versión de lanzamiento. Por ejemplo, si crea una aplicación en la versión 6.9.0 de Amazon EMR, utilice las siguientes imágenes.

Tipo Imagen

Spark

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

Hive

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

Requisitos previos

Antes de crear una imagen personalizada de EMR sin servidor, complete estos requisitos previos.

  1. 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.

  2. 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 Dockerfile que comience con una instrucción FROM 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 push aws-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.

Console
  1. Inicie sesión en la consola de EMR Studio en https://console.aws.amazon.com /emr. Vaya hasta su aplicación o cree una nueva aplicación siguiendo las instrucciones de Crear una aplicación.

  2. Para especificar imágenes personalizadas al crear o actualizar una aplicación EMR sin servidor, seleccione Configuración personalizada en las opciones de configuración de la aplicación.

  3. En la sección Configuración de imagen personalizada, active la casilla de verificación Uso de la imagen personalizada con esta aplicación.

  4. Pegue el URI de imagen de Amazon ECR en el campo URI de imagen. EMR sin servidor utiliza esta imagen para todos los tipos de trabajadores de la aplicación. Como alternativa, puede elegir diferentes imágenes personalizadas y pegar diferentes imágenes de Amazon ECR URIs para cada tipo de trabajador.

CLI
  • Cree una aplicación con el parámetro image-configuration. EMR sin servidor aplica esta configuración a todos los tipos de trabajadores.

    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 crear una aplicación con diferente configuración de imagen para cada tipo de trabajador, utilice el parámetro worker-type-specifications.

    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 actualizar una aplicación, utilice el parámetro image-configuration. EMR sin servidor aplica esta configuración a todos los tipos de trabajadores.

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

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.