¿Cómo puedo instalar bibliotecas de Python en mis clústeres de EMR?

4 minutos de lectura
0

Quiero instalar bibliotecas externas de Python en mis clústeres de Amazon EMR

Descripción breve

Puede instalar bibliotecas de Python por medio de una acción de arranque.

EMR emplea puppet, el mecanismo de despliegue que se utiliza en Apache BigTop, para configurar e inicializar las aplicaciones en las instancias. El controlador de instancias es el componente del software de EMR que se ejecuta en todas las instancias del clúster. El controlador de instancias se encarga de inicializar y, a continuación, aprovisionar las instancias en función de la configuración de cada una.

El controlador de instancias ejecuta el script para el nodo de aprovisionamiento en /usr/share/aws/emr/node-provisioner/bin/provision-node con el fin de iniciar NodeProvisioner cuando arranca el clúster. NodeProvisioner se encarga de aprovisionar todas las aplicaciones de la distribución de EMR para configurar los nodos y clústeres. NodeProvisioner se considera como una acción de arranque final que se ejecuta después de haber ejecutado el resto de acciones de arranque en cada nodo del clúster.

Resolución

En los clústeres más recientes de EMR, las acciones de arranque se ejecutan antes de que Amazon EMR instale las aplicaciones que se especificaron en el momento de crear el clúster. La acción de arranque se ejecuta antes de que los nodos del clúster empiecen a procesar los datos. Si agrega nodos a un clúster que se está ejecutando, las acciones de arranque se ejecutarán también en esos nodos de la misma forma. Puede crear acciones de arranque personalizadas y especificar las aplicaciones que se instalarán cuando cree el clúster. Si desea obtener más información, consulte Cree acciones de arranque para instalar software adicional.

Solucione problemas con las bibliotecas instaladas por medio de acciones de arranque que se encuentran anuladas por las bibliotecas predeterminadas

Las bibliotecas predeterminadas de Amazon EMR pueden anular las que se hayan instalado por medio de acciones de arranque. El script de arranque se ejecuta antes de crear el clúster y antes de aprovisionar los nodos. Por ese motivo, la versión predeterminada podría anular las bibliotecas.

Para evitar que surja este problema, cree una acción de arranque con retardo o bien una acción de arranque de segunda etapa como código en ejecución. Como alternativa, puede instalar los paquetes después de recibir el mensaje NODEPROVISIONSTATE SUCCESSFUL.

El script de arranque que se muestra a continuación actualiza la biblioteca tras finalizar la etapa de aprovisionamiento de la aplicación. Puede agregarlo como un script de arranque que se ejecute en segundo plano y que se cierre para que el aprovisionamiento del clúster pueda continuar. Este script sigue monitoreando el aprovisionamiento de nodos y, cuando este concluye, actualiza la biblioteca.

El script de ejemplo que se muestra a continuación actualiza la versión de 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

Nota: En algunos casos, es posible que los contenedores de YARN que ejecutan un paquete de Python no estén empleando un paquete actualizado que se pueda instalar por medio de la resolución anterior. Si el contenedor no ejecuta un paquete actualizado, observará errores de module not found (módulo no encontrado) al intentar instalarlo. El motivo es que el proceso YARN NodeManager es el responsable de lanzar los contenedores. Puede que los contenedores del NodeManager ya se estén ejecutando o que estén asignados antes de que el NODEPROVISIONSTATE se concluya correctamente. Este problema se suele dar en los clústeres con varios usuarios que utilizan un escalamiento automático frecuente.

Puede evitar los errores de module not found (módulo no encontrado) consultando el estado del servicio nodemanager. A continuación, ejecute la acción de arranque que desee en cuanto se inicie el nodemanager.


OFICIAL DE AWS
OFICIAL DE AWSActualizada hace un año