Quiero actualizar todos los nodos de un clúster de Amazon EMR una vez finalizado el estado BOOTSTRAPPING.
Resolución
La acción de arranque se produce antes de que Amazon EMR instale y configure aplicaciones como Apache Hadoop y Apache Spark. Para cambiar todos los nodos del clúster después de que Amazon EMR instale y configure las aplicaciones, adjunte un script de acción de arranque.
Actualice el siguiente script de bash con los cambios que desee aplicar a sus nodos:
#!/bin/bash
set -xe
EMR_SECONDARY_BA_SCRIPT=$(cat <<'EOF'
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"
NODETYPE=$(cat /mnt/var/lib/instance-controller/extraInstanceData.json | jq -r '.instanceRole' | awk '{print tolower($0)}')
if [ "$NODETYPE" == "master" ]
then
echo "In Master"
######ENTER YOUR CODE THAT SHOULD BE EXECUTED ON PRIMARY NODE######
elif [ "$NODETYPE" == "core" ]
then
echo "In Core"
######ENTER YOUR CODE THAT SHOULD BE EXECUTED ON CORE NODE######
elif [ "$NODETYPE" == "task" ]
then
echo "In Task"
######ENTER YOUR CODE THAT SHOULD BE EXECUTED ON TASK NODE######
fi
exit;
fi
sleep 10;
done
EOF
)
echo "${EMR_SECONDARY_BA_SCRIPT}" | tee -a /tmp/emr-secondary-ba.sh
chmod u+x /tmp/emr-secondary-ba.sh
/tmp/emr-secondary-ba.sh &> /tmp/emr-secondary-ba.log &
exit 0
Nota: De forma predeterminada, el script anterior usa el usuario de hadoop. Si los cambios requieren permisos, actualice el usuario a sudo.
Después de actualizar el script de bash, adjúntelo a su clúster como un script de acción de arranque.
Información relacionada
Descripción del ciclo de vida del clúster
Creación de acciones de arranque para instalar software adicional con un clúster de Amazon EMR