2016-11-30 1 views
2

Je suis en train de mettre à jour un cluster EMR en cours d'exécution avec installation pip sur toutes les machines esclaves. Comment puis je faire ça?Exécuter la commande sur les esclaves EMR?

Je ne peux pas le faire avec une étape bootstrap car c'est un EMR de longue durée et je ne peux pas l'enlever. Le cluster EMR exécute Spark & Yarn, donc j'utiliserais normalement spark slaves.sh, mais je ne trouve pas ce script sur le nœud maître. Est-il installé dans un endroit que je n'ai pas trouvé? Ou y a-t-il un moyen de l'installer?

J'ai vu d'autres questions qui disent utiliser le fil distribué-shell, mais je ne trouve pas d'exemple pratique pour le faire. Par ailleurs, le cluster utilise EMR 4.8.0, Spark 1.6.1, je crois.

+0

Essayez des outils comme ansible/Saltstack pour atteindre vos objectifs. Ou essayez ce script Linux - https://hvivani.com.ar/2015/06/19/yarn-execute-a-script-on-all-the-nodes-of-the-cluster/. – annunarcist

Répondre

3

Vous pouvez exécuter la commande yarn à partir de vos nœuds pour obtenir la liste de tous les nœuds et vous pouvez utiliser SSH pour exécuter des commandes sur tous ces nœuds. Comme dans l'article mentionné précédemment, vous pouvez exécuter quelque chose comme

#Copy ssh key(like ssh_key.pem) of the cluster to master node. 
aws s3 cp s3://bucket/ssh_key.pem ~/ 

# change permissions to read 
chmod 400 ssh_key.pem 

# Run a PIP command 
yarn node -list|sed -n "s/^\(ip[^:]*\):.*/\1/p" | xargs -t -I{} -P10 ssh -o StrictHostKeyChecking=no -i ~/ssh_key.pem [email protected]{} "pip install package"