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.
Personnalisation d'une image EMR sans serveur
À partir d'Amazon EMR 6.9.0, vous pouvez utiliser des images personnalisées pour regrouper les dépendances des applications et les environnements d'exécution dans un conteneur unique avec Amazon EMR Serverless. Cela simplifie la gestion des dépendances de charge de travail et rend vos packages plus portables. Lorsque vous personnalisez votre image EMR Serverless, elle offre les avantages suivants :
-
Installe et configure des packages optimisés pour vos charges de travail. Ces packages ne sont peut-être pas largement disponibles dans la distribution publique des environnements EMR d'exécution Amazon.
-
Intègre le EMR mode Serverless aux processus actuels de création, de test et de déploiement établis au sein de votre organisation, y compris le développement et les tests locaux.
-
Applique des processus de sécurité établis, tels que la numérisation d'images, qui répondent aux exigences de conformité et de gouvernance au sein de votre organisation.
-
Vous permet d'utiliser vos propres versions JDK de Python pour vos applications.
EMRServerless fournit des images que vous pouvez utiliser comme base lorsque vous créez vos propres images. L'image de base fournit les fichiers JAR, la configuration et les bibliothèques essentiels pour que l'image interagisse avec EMR Serverless. Vous pouvez trouver l'image de base dans la galerie ECR publique Amazon
Type | Image |
---|---|
Spark |
|
Hive |
|
Prérequis
Avant de créer une image personnalisée EMR sans serveur, remplissez ces conditions préalables.
-
Créez un ECR référentiel Amazon dans le même référentiel Région AWS que celui que vous utilisez pour lancer des applications EMR sans serveur. Pour créer un dépôt ECR privé Amazon, consultez Création d'un dépôt privé.
-
Pour autoriser les utilisateurs à accéder à votre ECR référentiel Amazon, ajoutez les politiques suivantes aux utilisateurs et aux rôles qui créent ou mettent à jour des applications EMR sans serveur avec des images provenant de ce référentiel.
{ "Version": "2012-10-17", "Statement": [ { "Sid": "ECRRepositoryListGetPolicy", "Effect": "Allow", "Action": [ "ecr:GetDownloadUrlForLayer", "ecr:BatchGetImage", "ecr:DescribeImages" ], "Resource": "
ecr-repository-arn
" } ] }Pour plus d'exemples de politiques basées sur l'ECRidentité d'Amazon, consultez les exemples de politiques basées sur l'identité d'Amazon Elastic Container Registry.
Étape 1 : créer une image personnalisée à partir d'images de base EMR sans serveur
Créez d'abord un DockerfileFROM
instruction utilisant votre image de base préférée. Après les FROM
instructions, vous pouvez inclure toute modification que vous souhaitez apporter à l'image. L'image de base définit automatiquement le USER
àhadoop
. Ce paramètre n'est peut-être pas autorisé pour toutes les modifications que vous incluez. Pour contourner le problème, réglez le USER
paramètre surroot
, modifiez votre image, puis USER
redéfinissez le paramètre sur. hadoop:hadoop
Pour consulter des exemples de cas d'utilisation courants, consultezUtilisation d'images personnalisées avec EMR Serverless.
# 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
Une fois que vous avez le Dockerfile, créez l'image à l'aide de la commande suivante.
# build the docker image docker build . -t
aws-account-id
.dkr.ecr.region
.amazonaws.com/my-repository
[:tag]or[@digest]
Étape 2 : Valider l'image localement
EMRServerless fournit un outil hors ligne qui permet de vérifier statiquement votre image personnalisée pour valider les fichiers de base, les variables d'environnement et les configurations d'image correctes. Pour plus d'informations sur l'installation et l'exécution de l'outil, consultez l'image CLI GitHub Amazon EMR Serverless
Après avoir installé l'outil, exécutez la commande suivante pour valider une image :
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
Vous devriez voir un résultat similaire à ce qui suit.
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. -----------------------------------------------------------------
Étape 3 : Chargez l'image dans votre ECR référentiel Amazon
Transférez votre ECR image Amazon vers votre ECR référentiel Amazon à l'aide des commandes suivantes. Assurez-vous de disposer des IAM autorisations appropriées pour transférer l'image vers votre référentiel. Pour plus d'informations, consultez la section Envoyer une image dans le guide de ECR l'utilisateur Amazon.
# 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
Étape 4 : créer ou mettre à jour une application avec des images personnalisées
Choisissez l' AWS Management Console onglet ou AWS CLI l'onglet en fonction de la façon dont vous souhaitez lancer votre application, puis effectuez les étapes suivantes.
Étape 5 : Autoriser EMR Serverless à accéder au référentiel d'images personnalisé
Ajoutez la politique de ressources suivante au ECR référentiel Amazon pour permettre au principal du service EMR Serverless d'utiliser les download
demandes get
describe
, et provenant de ce référentiel.
{ "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
" } } } ] }
La meilleure pratique en matière de sécurité consiste à ajouter une clé de aws:SourceArn
condition à la politique du référentiel. La clé de condition IAM globale aws:SourceArn
garantit que EMR Serverless utilise le référentiel uniquement pour une applicationARN. Pour plus d'informations sur les politiques relatives aux ECR référentiels Amazon, consultez Création d'un référentiel privé.
Considérations et restrictions
Lorsque vous travaillez avec des images personnalisées, tenez compte des points suivants :
-
Utilisez l'image de base correcte qui correspond au type (Spark ou Hive) et à l'étiquette de version (par exemple
emr-6.9.0
) de votre application. -
EMRServerless ignore les
[ENTRYPOINT]
instructions[CMD]
contenues dans le fichier Docker. Utilisez les instructions courantes du fichier Docker, telles que[COPY]
[RUN]
, et[WORKDIR]
. -
Vous ne devez pas modifier
JAVA_HOME
les variablesSPARK_HOME
d'HIVE_HOME
environnementTEZ_HOME
lorsque vous créez une image personnalisée. -
La taille des images personnalisées ne peut pas dépasser 5 Go.
-
Si vous modifiez des fichiers binaires ou des fichiers JAR dans les images de EMR base d'Amazon, cela peut entraîner des échecs de lancement d'applications ou de tâches.
-
Le ECR référentiel Amazon doit se trouver dans le même emplacement Région AWS que celui que vous utilisez pour lancer des applications EMR sans serveur.