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
-
Suivez les Configuration d'Amazon EMR sur EKS étapes pour Amazon EMR surEKS.
-
Installez Docker dans votre environnement. Pour plus d'informations, consultez Obtenir Docker
.
É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 :
-
Choisissez une image de baseURI. L'image URI suit ce format
, comme le montre l'exemple suivant.ECR-registry-account
.dkr.ecr.Region
.amazonaws.com/spark/container-image-tag
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.
-
Connectez-vous au ECR référentiel Amazon dans lequel l'image de base est stockée. Remplacez
895885662937
etus-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-stdin895885662937
.dkr.ecr.us-west-2
.amazonaws.com -
Extrayez l'image de base dans votre espace de travail local.
emr-6.6.0:latest
Remplacez-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.
-
Créez un nouveau espace de travail
Dockerfile
sur votre espace de travail local. -
Modifiez le
Dockerfile
que vous venez de créer et ajoutez le contenu qui suit. CeDockerfile
utilise l'image du conteneur que vous avez extrait à partir de895885662937.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
-
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 fichierDockerfile
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
-
À 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
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.
-
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
. -
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
-
Exécutez la commande suivante pour valider votre image personnalisée.
emr-on-eks-custom-image validate-image -i
image_name
-rrelease_version
[-timage_type
]-
-i
indique 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, saisissezspark
. La valeur par défaut estspark
. 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.
-
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
. Remplacezus-west-2
par votre région.aws ecr create-repository \ --repository-name
emr6.6_custom_repo
\ --image-scanning-configuration scanOnPush=true \ --regionus-west-2
Pour plus d'informations, consultez la section Créer un référentiel dans le guide de ECR l'utilisateur Amazon.
-
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-stdinaws_account_id
.dkr.ecr.us-west-2
.amazonaws.com.rproxy.goskope.comPour plus d'informations, consultez Authentifier auprès de votre registre par défaut dans le guide de l'ECRutilisateur Amazon.
-
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'entryPoint
argument 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.