Como instalo bibliotecas Python em meus clusters do EMR?

3 minuto de leitura
0

Quero instalar bibliotecas externas de Python em meus clusters do Amazon EMR

Breve descrição

Você pode instalar bibliotecas Python usando uma ação de bootstrap.

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

O nstance-controller executa o script provision-node em /usr/share/aws/emr/node-provisioner/bin/provision-node para iniciar o NodeProvisioner na inicialização do cluster. O NodeProvisioner provisiona todos os aplicativos da distribuição EMR para a configuração do nó e do cluster. O NodeProvisioner é tratado como uma ação final de bootstrap que é executada após todas as outras ações de bootstrap serem executadas em cada nó do cluster.

Resolução

Nos clusters mais recentes do EMR, as ações de bootstrap são executadas antes que o Amazon EMR instale qualquer aplicativo especificado na criação do cluster. A ação de bootstrap é executada antes que os nós do cluster comecem a processar dados. Se você adicionar nós a um cluster em execução, as ações de bootstrap também serão executadas nesses nós da mesma maneira. Você pode criar ações personalizadas de bootstrap e especificar aplicativos a serem instalados ao criar seu cluster. Para obter mais informações, consulte Criar ações de bootstrap para instalar software adicional.

Solucione problemas de bibliotecas instaladas por ações de bootstrap que são substituídas pelas bibliotecas padrão

As bibliotecas instaladas usando ações de bootstrap podem ser substituídas pelas bibliotecas padrão do Amazon EMR. O script bootstrap é executado antes da criação do cluster e antes do provisionamento do nó. Portanto, as bibliotecas podem ser substituídas pela versão padrão.

Para evitar esse problema, crie uma ação de bootstrap atrasada ou uma ação de bootstrap de segundo estágio como código em execução. Ou instale pacotes depois de receber a mensagem NODEPROVISIONSTATE SUCCESSFUL.

O script de bootstrap a seguir atualiza a biblioteca após o estágio de provisionamento do aplicativo. Você pode adicionar esse script como um script de bootstrap, que é executado em segundo plano e sai com êxito para que o provisionamento do cluster continue. Esse script continua monitorando o provisionamento de nós e atualiza a biblioteca após o provisionamento.

O exemplo de script a seguir atualiza a versão 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

Observação: em alguns casos, os contêineres YARN que executam um pacote Python podem não usar um pacote atualizado que possa ser instalado usando a resolução anterior. Se o contêiner não estiver executando um pacote atualizado, você verá erros de module not found ao tentar instalar. Isso ocorre porque o processo YARN NodeManager é responsável pelo lançamento de contêineres. Os contêineres do NodeManager podem já estar em execução ou alocados antes que o NODEPROVISIONSTATE seja bem-sucedido. Esse problema geralmente é observado em clusters de vários locatários que têm escalonamento automático frequente.

Você pode evitar erros de module not found pesquisando o estado do serviço nodemanager. Depois, execute a ação de bootstrap desejada assim que o nodemanager for iniciado.


AWS OFICIAL
AWS OFICIALAtualizada há um ano