Por que o aplicativo YARN ainda usa recursos após a conclusão do trabalho do Spark que eu executei no Amazon EMR?
Estou executando um caderno Jupyter ou Zeppelin no meu cluster Amazon EMR. O aplicativo YARN continua sendo executado mesmo após a conclusão do trabalho do Apache Spark que enviei.
Breve descrição
Quando você executa um caderno Spark no Zeppelin ou no Jupyter, o Spark inicia um intérprete. O intérprete cria um aplicativo YARN. Esse aplicativo é o driver do Spark que aparece quando você lista aplicativos. O driver não termina quando você acaba de executar um trabalho do caderno. Por design, o driver do Spark permanece ativo para que possa solicitar contêineres de aplicativos para as execuções de código em tempo real. A desvantagem é que o aplicativo YARN pode estar usando recursos necessários para outros trabalhos. Para resolver esse problema, você pode interromper manualmente o aplicativo YARN. Como alternativa, você pode definir um valor de limite de tempo que interromperá automaticamente o aplicativo.
Resolução
Zeppelin
Opção 1: reinicie o intérprete do Spark
Antes de começar, verifique se você tem permissão para reiniciar o intérprete no Zeppelin.
1. Abra o Zeppelin.
2. Na lista suspensa ao lado do nome do usuário, escolha Intérprete.
3. Encontre o intérprete do Spark e escolha Reiniciar. O Zeppelin encerra o trabalho do YARN quando o intérprete é reiniciado.
Opção 2: pare o trabalho do YARN manualmente
Antes de começar, certifique-se do seguinte:
- Você tem acesso SSH ao cluster do Amazon EMR.
- Você tem permissão para executar comandos do YARN.
Use o comando -kill para encerrar o aplicativo. No exemplo a seguir, substitua application_id pelo ID do aplicativo.
yarn application -kill application_id
Opção 3: definir um valor de limite de tempo do intérprete
As versões 0.8.0 e posteriores do Zeppelin (disponíveis nas versões 5.18.0 e posteriores do Amazon EMR) incluem um gerenciador de ciclo de vida para intérpretes. Use a configuração TimeoutLifecycleManager para encerrar intérpretes após um período de limite de tempo de inatividade especificado:
1. Crie um arquivo etc/zeppelin/conf/zeppelin-site.xml com o conteúdo a seguir. Neste exemplo, o limite de tempo é definido como 120.000 milissegundos (2 minutos). Escolha um valor de limite de tempo adequado para seu ambiente.
<?xml version="1.0"?> <?xml-stylesheet type="text/xsl" href="configuration.xsl"?> <configuration> <property> <name>zeppelin.interpreter.lifecyclemanager.class</name> <value>org.apache.zeppelin.interpreter.lifecycle.TimeoutLifecycleManager</value> <description>This is the LifecycleManager class for managing the lifecycle of interpreters. The interpreter terminates after the idle timeout period.</description> </property> <property> <name>zeppelin.interpreter.lifecyclemanager.timeout.checkinterval</name> <value>60000</value> <description>The interval for checking whether the interpreter has timed out, in milliseconds.</description> </property> <property> <name>zeppelin.interpreter.lifecyclemanager.timeout.threshold</name> <value>120000</value> <description>The idle timeout limit, in milliseconds.</description> </property> </configuration>
2. Execute os seguintes comandos para reiniciar o Zeppelin:
$ sudo stop zeppelin
$ sudo start zeppelin
Jupyter
Opção 1: desligue manualmente o caderno
Depois que o trabalho for concluído, use um dos seguintes métodos para parar o kernel na interface de usuário do Jupyter:
- Na interface do caderno Jupyter, abra o menu Arquivo e escolha Fechar e parar.
- No painel do Jupyter, abra a guia Em execução. Escolha Desligar para o caderno que você deseja interromper.
Opção 2: desligue manualmente o kernel
Na interface do caderno Jupyter, abra o menu Kernel e escolha Desligar.
Opção 3: configurar o atributo de limite de tempo
Se você fechar a guia do caderno ou a janela do navegador antes de desligar o kernel, o trabalho do YARN continuará sendo executado. Para evitar que isso aconteça, configure o atributo NotebookApp.shutdown_no_activity_timeout. Esse atributo encerra o trabalho do YARN após um período de inatividade específico, mesmo se você fechar a guia ou a janela do navegador.
Faça o seguinte para configurar o atributo NotebookApp.shutdown_no_activity_timeout:
1. Abra o arquivo /etc/jupyter/jupyter_notebook_config.py no nó principal e adicione uma entrada semelhante à seguinte. Neste exemplo, o atributo de limite de tempo é definido como 120 segundos. Escolha um valor de limite de tempo adequado para seu ambiente.
c.NotebookApp.shutdown_no_activity_timeout = 120
2. Execute os seguintes comandos para reiniciar o jupyterhub:
sudo docker stop jupyterhub
sudo docker start jupyterhub
Informações relacionadas
Conteúdo relevante
- AWS OFICIALAtualizada há um ano
- AWS OFICIALAtualizada há um ano
- AWS OFICIALAtualizada há 2 anos
- AWS OFICIALAtualizada há um ano