Come posso installare le librerie Python sui cluster EMR?

3 minuti di lettura
0

Voglio installare le librerie Python esterne sui cluster Amazon EMR

Breve descrizione

È possibile installare le librerie Python usando un'operazione bootstrap.

EMR utilizza puppet, il meccanismo di implementazione utilizzato da Apache BigTop, per configurare e inizializzare le applicazioni sulle istanze. Instance-controller è il componente software di EMR che viene eseguito su ogni istanza del cluster. Instance-controller inizializza e quindi fornisce le istanze in base alla configurazione dell'istanza.

Instance-controller esegue lo script provision-node in /usr/share/aws/emr/node-provisioner/bin/provision-node per avviare NodeProvisioner all'avvio del cluster. NodeProvisioner fornisce tutte le applicazioni della distribuzione EMR per la configurazione di nodi e cluster. NodeProvisioner viene considerato come un'operazione bootstrap finale che viene eseguita dopo che tutte le altre operazioni bootstrap sono state eseguite su ciascun nodo del cluster.

Risoluzione

Nei cluster EMR più recenti, le operazioni bootstrap vengono eseguite prima che Amazon EMR installi le applicazioni specificate al momento della creazione del cluster. L'operazione bootstrap viene eseguita prima che i nodi del cluster inizino a elaborare i dati. Se si aggiungono nodi a un cluster in esecuzione, anche le operazioni bootstrap vengono eseguite su quei nodi allo stesso modo. È possibile creare operazioni bootstrap personalizzate e specificare le applicazioni da installare quando si crea il cluster. Per ulteriori informazioni, consulta Creare operazioni bootstrap per installare software aggiuntivo.

Risolvi i problemi relativi alle librerie installate mediante operazioni bootstrap che vengono sovrascritte dalle librerie predefinite

Le librerie installate tramite operazioni bootstrap potrebbero essere sostituite dalle librerie predefinite di Amazon EMR. Lo script bootstrap viene eseguito prima della creazione del cluster e prima del provisioning del nodo. Pertanto, le librerie potrebbero essere sostituite dalla versione predefinita.

Per evitare questo problema, crea un'operazione bootstrap ritardata o un'operazione bootstrap di seconda fase come codice in esecuzione. Oppure, installa i pacchetti dopo aver ricevuto il messaggio NODEPROVISIONSTATE SUCCESSFUL.

Il seguente script bootstrap aggiorna la libreria dopo la fase di provisioning dell'applicazione. È possibile aggiungere questo script come script bootstrap che viene eseguito in background ed è in grado di uscire correttamente, in modo che il provisioning del cluster continui. Questo script continua a monitorare il provisioning dei nodi e aggiorna la libreria dopo il provisioning.

Il seguente script di esempio aggiorna la versione 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: in alcuni casi, i container YARN che eseguono un pacchetto Python potrebbero non utilizzare un pacchetto aggiornato che può essere installato utilizzando la risoluzione precedente. Se il container non esegue un pacchetto aggiornato, vengono visualizzati errori "modulo non trovato" durante il tentativo di installazione. Questo perché il processo YARN NodeManager è responsabile del lancio dei container. I container del NodeManager potrebbero essere già in esecuzione o allocati prima che NODEPROVISIONSTATE abbia successo. Questo problema si riscontra spesso nei cluster multi-tenant con scalabilità automatica frequente.

È possibile evitare gli errori "modulo non trovato" utilizzando il polling dello stato del servizio nodemanager. Quindi, esegui l'operazione bootstrap desiderata non appena si avvia il nodemanager.


AWS UFFICIALE
AWS UFFICIALEAggiornata un anno fa