Como faço para instalar e solucionar problemas de bibliotecas Python nos clusters sem servidor do Amazon EMR e do Amazon EMR?

4 minuto de leitura
0

Quero instalar e solucionar problemas de bibliotecas Python nos clusters sem servidor do Amazon EMR e do Amazon EMR.

Resolução

Instale bibliotecas Python em clusters do Amazon EMR

Para instalar bibliotecas python em clusters do Amazon EMR, use uma ação de bootstrap.

O Amazon EMR usa puppet, um mecanismo de implantação do Apache BigTop, para configurar e inicializar aplicativos em instâncias. O controlador de instância é um componente de software do Amazon EMR que é executado em todas as instâncias do cluster. O controlador de instâncias inicializa e, em seguida, provisiona as instâncias com base na configuração da instância.

Para iniciar o NodeProvisioner na inicialização do cluster, o controlador da instância executa o script do nó de provisionamento /usr/share/aws/emr/node-provisioner/bin/provision-node. Em seguida, o NodeProvisioner provisiona todos os aplicativos de distribuição do Amazon EMR para a configuração do nó e do cluster. O NodeProvisioner é uma ação final de bootstrap que é executada após todas as outras ações de bootstrap serem executadas em cada nó do cluster.

Para os clusters mais recentes do Amazon EMR, as ações de bootstrap são executadas antes que o Amazon EMR instale os aplicativos especificados na criação do cluster. Além disso, a ação de bootstrap é executada antes que os nós do cluster processem os dados. Se você adicionar nós a um cluster em execução, as ações de bootstrap serão executadas nesses nós. Você pode criar ações de bootstrap personalizadas e especificar aplicativos a serem instalados ao criar seu cluster.

Instale bibliotecas Python em clusters sem servidor do Amazon EMR

Para instalar bibliotecas Python e usar seus recursos em seus trabalhos e notebooks do Spark, use um dos seguintes métodos com base no seu caso de uso:

Solucionar problemas de bibliotecas Python

As bibliotecas Python instaladas por ações de bootstrap podem ser substituídas pelas bibliotecas padrão do Amazon EMR. Para resolver esse problema, crie uma ação de bootstrap atrasada ou uma ação de bootstrap de segundo estágio como um código em execução. Ou instale os pacotes depois de receber a mensagem NODEPROVISIONSTATE SUCCESSFUL.

A ação de bootstrap a seguir atualiza a biblioteca após o estágio de provisionamento do aplicativo. Adicione esse script como um script de bootstrap que é executado em segundo plano e sai para que o provisionamento do cluster continue. Esse script continua monitorando o provisionamento de nós e atualiza a biblioteca após o provisionamento.

Exemplo de script que atualiza a versão do 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 &

Observação: os contêineres YARN que executam um pacote Python podem não usar um pacote atualizado que possa ser instalado com a resolução anterior. Como resultado, você receberá erros de módulo não encontrado ao tentar instalar um pacote atualizado. Para evitar erros de módulo não encontrado, pesquise o estado do serviço nodemanager. Em seguida, execute a ação de bootstrap desejada quando o nodemanager for iniciado.

AWS OFICIAL
AWS OFICIALAtualizada há 8 meses