Instructions de personnalisation des images Docker - Amazon EMR

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

Instructions de personnalisation des images Docker

Suivez ces étapes pour personnaliser les images Docker pour Amazon EMR surEKS. Les étapes vous indiquent comment obtenir une image de base, la personnaliser et la publier, et soumettre une charge de travail à l'aide de cette image.

Note

Parmi les autres options que vous pouvez envisager lors de la personnalisation des images Docker, citons la personnalisation pour les points de terminaison interactifs, afin de vous assurer que vous disposez des dépendances requises, ou l'utilisation d'images de conteneurs multi-architecturales :

Prérequis

Étape 1 : récupérer une image de base depuis Amazon Elastic Container Registry (AmazonECR)

L'image de base contient le EMR runtime Amazon et les connecteurs utilisés pour accéder à d'autres AWS services. Pour Amazon EMR 6.9.0 et versions ultérieures, vous pouvez obtenir les images de base depuis la galerie ECR publique Amazon. Parcourez la galerie pour trouver le lien de l'image et extrayez l'image dans votre espace de travail local. Par exemple, pour la version EMR 7.3.0 d'Amazon, la docker pull commande suivante vous permet d'obtenir la dernière image de base standard. Vous pouvez remplacer emr-7.3.0:latest par emr-7.3.0-spark-rapids:latest pour récupérer l'image qui possède l'RAPIDSaccélérateur Nvidia. Vous pouvez également remplacer emr-7.3.0:latest par emr-7.3.0-java11:latest pour récupérer l'image avec le moteur d'exécution Java 11.

docker pull public.ecr.aws/emr-on-eks/spark/emr-7.3.0:latest

Si vous souhaitez récupérer l'image de base d'Amazon EMR 6.9.0 ou d'une version antérieure, ou si vous préférez la récupérer depuis les comptes de ECR registre Amazon de chaque région, procédez comme suit :

  1. Choisissez une image de baseURI. L'image URI suit ce formatECR-registry-account.dkr.ecr.Region.amazonaws.com/spark/container-image-tag, comme le montre l'exemple suivant.

    895885662937.dkr.ecr.us-west-2.amazonaws.com/spark/emr-6.6.0:latest

    Pour choisir une image de base dans votre région, consultez Détails relatifs à la sélection d'une image de base URI.

  2. Connectez-vous au ECR référentiel Amazon dans lequel l'image de base est stockée. Remplacez 895885662937 et us-west-2 par le compte de ECR registre Amazon et la AWS région que vous avez sélectionnés.

    aws ecr get-login-password --region us-west-2 | docker login --username AWS --password-stdin 895885662937.dkr.ecr.us-west-2.amazonaws.com
  3. Extrayez l'image de base dans votre espace de travail local. emr-6.6.0:latestRemplacez-le par le tag d'image du conteneur que vous avez sélectionné.

    docker pull 895885662937.dkr.ecr.us-west-2.amazonaws.com/spark/emr-6.6.0:latest

Étape 2 : Personnaliser une image de base

Suivez ces étapes pour personnaliser l'image de base que vous avez extraite d'AmazonECR.

  1. Créez un nouveau espace de travail Dockerfile sur votre espace de travail local.

  2. Modifiez le Dockerfile que vous venez de créer et ajoutez le contenu qui suit. Ce Dockerfile utilise l'image du conteneur que vous avez extrait à partir de 895885662937.dkr.ecr.us-west-2.amazonaws.com/spark/emr-6.6.0:latest.

    FROM 895885662937.dkr.ecr.us-west-2.amazonaws.com/spark/emr-6.6.0:latest USER root ### Add customization commands here #### USER hadoop:hadoop
  3. Ajoutez des commandes dans le Dockerfile pour personnaliser l'image de base. Par exemple, ajoutez une commande pour installer les bibliothèques Python, comme le montre le fichier Dockerfile ci-dessous.

    FROM 895885662937.dkr.ecr.us-west-2.amazonaws.com/spark/emr-6.6.0:latest USER root RUN pip3 install --upgrade boto3 pandas numpy // For python 3 USER hadoop:hadoop
  4. À partir du répertoire où le Dockerfile est créé, exécutez la commande suivante pour créer l'image Docker. Donnez un nom à l'image Docker, emr6.6_custom par exemple.

    docker build -t emr6.6_custom .

Étape 3 : (facultative, mais recommandée) Valider une image personnalisée

Nous vous recommandons de tester la compatibilité de votre image personnalisée avant de la publier. Vous pouvez utiliser l'image EKS personnalisée Amazon EMR on CLI pour vérifier si votre image possède les structures de fichiers requises et les configurations correctes pour être exécutée sur Amazon EMR surEKS.

Note

L'image Amazon EMR on EKS custom CLI ne peut pas confirmer que votre image est exempte d'erreur. Faites attention lorsque vous supprimez des dépendances des images de base.

Suivez les étapes ci-dessous pour valider votre image personnalisée.

  1. Téléchargez et installez Amazon EMR sur une image EKS personnaliséeCLI. Pour plus d'informations, consultez le guide d'CLIinstallation d'Amazon EMR sur les images EKS personnalisées.

  2. Exécutez la commande suivante pour tester l'installation.

    emr-on-eks-custom-image --version

    Voici un exemple de résultat.

    Amazon EMR on EKS Custom Image CLI Version: x.xx
  3. Exécutez la commande suivante pour valider votre image personnalisée.

    emr-on-eks-custom-image validate-image -i image_name -r release_version [-t image_type]
    • -iindique l'image locale URI qui doit être validée. Il peut s'agir de l'imageURI, de tout nom ou tag que vous avez défini pour votre image.

    • -r indique la version exacte de l'image de base, par exemple, emr-6.6.0-latest.

    • -t indique le type d'image. S'il s'agit d'une image Spark, saisissez spark. La valeur par défaut est spark. La CLI version actuelle d'Amazon EMR sur image EKS personnalisée ne prend en charge que les images d'exécution Spark.

    Si vous exécutez la commande avec succès et que l'image personnalisée respecte toutes les configurations et structures de fichiers requises, le résultat renvoyé affiche les résultats de tous les tests, comme le montre l'exemple ci-dessous.

    Amazon EMR on EKS Custom Image Test Version: x.xx ... Checking if docker cli is installed ... Checking Image Manifest [INFO] Image ID: xxx [INFO] Created On: 2021-05-17T20:50:07.986662904Z [INFO] Default User Set to hadoop:hadoop : PASS [INFO] Working Directory Set to /home/hadoop : PASS [INFO] Entrypoint Set to /usr/bin/entrypoint.sh : PASS [INFO] SPARK_HOME is set with value: /usr/lib/spark : PASS [INFO] JAVA_HOME is set with value: /etc/alternatives/jre : PASS [INFO] File Structure Test for spark-jars in /usr/lib/spark/jars: 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 bin-files in /usr/bin: PASS ... Start Running Sample Spark Job [INFO] Sample Spark Job Test with local:///usr/lib/spark/examples/jars/spark-examples.jar : PASS ----------------------------------------------------------------- Overall Custom Image Validation Succeeded. -----------------------------------------------------------------

    Si l'image personnalisée ne répond pas aux configurations ou aux structures de fichiers requises, des messages d'erreur apparaissent. Le résultat renvoyé fournit des informations sur les configurations ou les structures de fichiers incorrectes.

Étape 4 : Publier une image personnalisée

Publiez la nouvelle image Docker dans votre ECR registre Amazon.

  1. Exécutez la commande suivante pour créer un ECR référentiel Amazon pour stocker votre image Docker. Donnez un nom à votre dépôt, par exemple,emr6.6_custom_repo. Remplacez us-west-2 par votre région.

    aws ecr create-repository \ --repository-name emr6.6_custom_repo \ --image-scanning-configuration scanOnPush=true \ --region us-west-2

    Pour plus d'informations, consultez la section Créer un référentiel dans le guide de ECR l'utilisateur Amazon.

  2. Exécutez la commande suivante pour vous authentifier dans votre registre par défaut.

    aws ecr get-login-password --region us-west-2 | docker login --username AWS --password-stdin aws_account_id.dkr.ecr.us-west-2.amazonaws.com

    Pour plus d'informations, consultez Authentifier auprès de votre registre par défaut dans le guide de l'ECRutilisateur Amazon.

  3. Marquez et publiez une image dans le ECR référentiel Amazon que vous avez créé.

    Balisez l'image.

    docker tag emr6.6_custom aws_account_id.dkr.ecr.us-west-2.amazonaws.com/emr6.6_custom_repo

    Transmettez l'image.

    docker push aws_account_id.dkr.ecr.us-west-2.amazonaws.com/emr6.6_custom_repo

    Pour plus d'informations, consultez la section Envoyer une image à Amazon ECR dans le guide de ECR l'utilisateur Amazon.

Étape 5 : Soumettre une charge de travail Spark sur Amazon à EMR l'aide d'une image personnalisée

Une fois qu'une image personnalisée a été créée et publiée, vous pouvez soumettre un Amazon EMR on EKS job à l'aide d'une image personnalisée.

Créez d'abord un fichier start-job-run-request .json et spécifiez le spark.kubernetes.container.image paramètre pour référencer l'image personnalisée, comme le montre l'exemple de JSON fichier suivant.

Note

Vous pouvez utiliser le local:// schéma pour faire référence aux fichiers disponibles dans l'image personnalisée, comme indiqué avec l'entryPointargument dans l'JSONextrait ci-dessous. Vous pouvez également utiliser le schéma local:// pour faire référence aux dépendances des applications. Tous les fichiers et dépendances auxquels il est fait référence à l'aide du schéma local:// doivent déjà être présents au chemin spécifié dans l'image personnalisée.

{ "name": "spark-custom-image", "virtualClusterId": "virtual-cluster-id", "executionRoleArn": "execution-role-arn", "releaseLabel": "emr-6.6.0-latest", "jobDriver": { "sparkSubmitJobDriver": { "entryPoint": "local:///usr/lib/spark/examples/jars/spark-examples.jar", "entryPointArguments": [ "10" ], "sparkSubmitParameters": "--class org.apache.spark.examples.SparkPi --conf spark.kubernetes.container.image=123456789012.dkr.ecr.us-west-2.amazonaws.com/emr6.6_custom_repo" } } }

Vous pouvez également référencer l'image personnalisée à l'aide des propriétés applicationConfiguration, comme le montre l'exemple ci-dessous.

{ "name": "spark-custom-image", "virtualClusterId": "virtual-cluster-id", "executionRoleArn": "execution-role-arn", "releaseLabel": "emr-6.6.0-latest", "jobDriver": { "sparkSubmitJobDriver": { "entryPoint": "local:///usr/lib/spark/examples/jars/spark-examples.jar", "entryPointArguments": [ "10" ], "sparkSubmitParameters": "--class org.apache.spark.examples.SparkPi" } }, "configurationOverrides": { "applicationConfiguration": [ { "classification": "spark-defaults", "properties": { "spark.kubernetes.container.image": "123456789012.dkr.ecr.us-west-2.amazonaws.com/emr6.6_custom_repo" } } ] } }

Exécutez ensuite la commande start-job-run pour soumettre la tâche.

aws emr-containers start-job-run --cli-input-json file://./start-job-run-request.json

Dans les JSON exemples ci-dessus, remplacez-le emr-6.6.0-latest par votre EMR version d'Amazon. Nous vous recommandons vivement d'utiliser la version -latest pour vous assurer que la version sélectionnée contient les dernières mises à jour de sécurité. Pour plus d'informations sur les EMR versions publiées par Amazon et leurs balises d'image, consultezDétails relatifs à la sélection d'une image de base URI.

Note

Vous pouvez utiliser spark.kubernetes.driver.container.image et spark.kubernetes.executor.container.image indiquer une image différente pour les pods de pilote et d'exécuteur.