Comment installer des bibliothèques Python sur mes clusters EMR ?

Lecture de 4 minute(s)
0

Je souhaite installer des bibliothèques Python externes sur mes clusters Amazon EMR

Brève description

Vous pouvez installer des bibliothèques Python à l'aide d'une action d'amorçage.

EMR utilise Puppet, le mécanisme de déploiement utilisé par Apache BigTop, pour configurer et initialiser les applications sur les instances. Le contrôleur d'instance est le composant logiciel d'EMR qui s'exécute sur chaque instance du cluster. Instance-Controller initialise puis provisionne les instances en fonction de la configuration.

Le contrôleur d'instance exécute le script de mise en service de nœud dans /usr/share/aws/emr/node-provisioner/bin/provision-node pour lancer NodeProvisioner au démarrage du cluster. NodeProvisioner fournit toutes les applications de la distribution EMR pour la configuration des nœuds et des clusters. NodeProvisioner est traité comme une action d'amorçage finale qui se lance après l'exécution de toutes les autres actions d'amorçage sur chaque nœud du cluster.

Résolution

Dans les derniers clusters EMR, les actions d'amorçage s'exécutent avant qu'Amazon EMR n'installe les applications spécifiées lors de la création du cluster. L'action d'amorçage s'exécute avant que les nœuds du cluster ne commencent à traiter les données. Si vous ajoutez des nœuds à un cluster en cours d'exécution, les actions d'amorçage se lancent également sur ces nœuds de la même manière. Vous pouvez créer des actions d'amorçage personnalisées et spécifier les applications à installer lorsque vous créez votre cluster. Pour plus d'informations, consultez la section Création d'actions d'amorçage pour installer des logiciels supplémentaires.

Résoudre les problèmes liés aux bibliothèques installées par des actions d'amorçage remplacées par les bibliothèques par défaut

Les bibliothèques installées à l'aide d'actions d'amorçage peuvent être remplacées par les bibliothèques par défaut d'Amazon EMR. Le script d'amorçage s'exécute avant la création du cluster et avant la mise en service des nœuds. Les bibliothèques peuvent donc être remplacées par la version par défaut.

Pour éviter ce problème, créez une action d'amorçage différée ou une action d'amorçage de deuxième étape en tant que code en cours d'exécution. Vous pouvez également installer les packages après avoir reçu le message NODEPROVISIONSTATE SUCCESSFUL.

Le script d'amorçage suivant met à niveau la bibliothèque après la phase de provisionnement de l'application. Vous pouvez ajouter ce script en tant que script d'amorçage qui s'exécute en arrière-plan et se ferme correctement afin que le provisionnement du cluster se poursuive. Ce script continue de surveiller la mise en service des nœuds et met ensuite la bibliothèque à niveau.

L'exemple de script suivant met à niveau la version NumPy :

#!/bin/bash
while true; do
NODEPROVISIONSTATE=\` sed -n '/localInstance [{]/,/[}]/{
/nodeProvisionCheckinRecord [{]/,/[}]/ {
   /status: / { p }
    /[}]/a
   }
  /[}]/a
}'  /emr/instance-controller/lib/info/job-flow-state.txt | awk ' { print \$2 }'\`
        if [ "\$NODEPROVISIONSTATE" == "SUCCESSFUL" ]; then
                     sleep 10;
                echo "Running my post provision bootstrap"
                #your code here
                #Below example lines
                #sudo python3 -m pip uninstall numpy==1.16.5 (this is default version of numpy)
                #sudo python3 -m pip install --upgrade numpy==1.20.1 (new version of numpy)
                exit;
        fi
sleep 10;
done

Remarque : Dans certains cas, les conteneurs YARN exécutant un package Python peuvent ne pas utiliser un package mis à jour qui peut être installé à l'aide de la résolution précédente. Si le conteneur n'exécute pas de package mis à jour, des erreurs de module introuvable s'affichent lors de la tentative d'installation. Cela est dû au fait que le processus YARN NodeManager est responsable du lancement des conteneurs. Les conteneurs de NodeManager sont peut-être déjà en cours d'exécution ou alloués avant que le NODEPROVISIONSTATE ne soit réussi. Ce problème est souvent rencontré dans les clusters mutualisés qui sont fréquemment soumis à une mise à l'échelle automatique.

Vous pouvez éviter les erreurs de module introuvable en interrogeant l'état du service nodemanager. Ensuite, exécutez l'action d'amorçage souhaitée dès que le nodemanager démarre.


AWS OFFICIEL
AWS OFFICIELA mis à jour il y a un an