Je souhaite installer et dépanner des bibliothèques Python dans des clusters Amazon EMR et Amazon EMR sans serveur.
Résolution
Installation de bibliothèques Python dans des clusters Amazon EMR
Pour installer des bibliothèques Python dans des clusters Amazon EMR, vous pouvez utiliser une action d'amorçage.
Amazon EMR utilise Puppet, un mécanisme de déploiement d'Apache BigTop, pour configurer et initialiser des applications sur les instances. Instance-controller est un composant logiciel d’Amazon EMR qui s'exécute sur chaque instance d’un cluster. Instance-controller initialise puis provisionne les instances en fonction de la configuration de l'instance.
Pour démarrer NodeProvisioner au moment du démarrage du cluster, le contrôleur d'instance exécute le script de nœud de provisionnement /usr/share/aws/emr/node-provisioner/bin/provision-node. NodeProvisioner provisionne ensuite toutes les applications de distribution d’Amazon EMR dans le cadre de la configuration des nœuds et des clusters. NodeProvisioner est une action d'amorçage finale qui s'exécute après l’exécution de toutes les autres actions d'amorçage sur chaque nœud de cluster.
Dans le cas des derniers clusters Amazon EMR, les actions d’amorçage sont exécutées avant qu'Amazon EMR n'installe les applications spécifiées lors de la création du cluster. En outre, l'action d’amorçage s'exécute avant que les nœuds du cluster ne traitent les données. Si vous ajoutez des nœuds à un cluster en cours d'exécution, les actions d'amorçage s'exécuteront sur ces nœuds. Vous pouvez créer des actions d'amorçage personnalisées et spécifier les applications à installer lors de la création de votre cluster.
Installation de bibliothèques Python dans des clusters Amazon EMR sans serveur
Pour installer des bibliothèques Python et utiliser leurs fonctionnalités dans vos blocs-notes et tâches Spark, vous pouvez employer l'une des méthodes suivantes en fonction de votre cas d'utilisation :
Dépannage de bibliothèques Python
Les bibliothèques Python installées via des actions d’amorçage peuvent être remplacées par les bibliothèques par défaut d'Amazon EMR. Pour résoudre ce problème, vous devez créer une action d'amorçage différée ou une deuxième étape d’action d'amorçage en tant que code d’exécution. Vous pouvez également installer les packages après avoir reçu le message NODEPROVISIONSTATE SUCCESSFUL.
L'action d'amorçage suivante effectue la mise à niveau de la bibliothèque après la phase de provisionnement de l'application. Ajoutez ce script en tant que script d'amorçage qui s'exécute en arrière-plan puis se ferme pour que le provisionnement du cluster puisse se poursuivre. Ce script continuera de surveiller le provisionnement des nœuds et mettra à niveau la bibliothèque après le provisionnement.
Exemple de script permettant de mettre à niveau la version de NumPy :
#!/bin/bash
set -x
cat > /var/tmp/fix-bootstap.sh <<'EOF'
#!/bin/bash
set -x
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
echo "Running my post provision bootstrap"
# your code here
sudo /mnt/notebook-env/bin/pip install pandas==1.3.5
sudo /mnt/notebook-env/bin/pip install boto==2.49.0
sudo /mnt/notebook-env/bin/pip install boto3==1.25.0
exit
else
echo "Sleeping Till Node is Provisioned"
sleep 10
fi
done
EOF
chmod +x /var/tmp/fix-bootstap.sh
nohup /var/tmp/fix-bootstap.sh 2>&1 &
Remarque : il est possible que les conteneurs YARN qui exécutent un package Python n’utilisent pas un package mis à jour pouvant être installé avec la résolution précédente. Dans ce cas, vous recevrez des erreurs de type module not found lorsque vous tenterez d'installer un package mis à jour. Pour éviter les erreurs module not found, interrogez l'état du service nodemanager. Exécutez ensuite l'action d'amorçage souhaitée au moment du démarrage du nodemanager.