Por que o aplicativo YARN ainda usa recursos após a conclusão do trabalho do Spark que eu executei no Amazon EMR?

4 minuto de leitura
0

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

Apache Zeppelin

Considerações ao usar o Zeppelin no Amazon EMR

Caderno Jupyter no Amazon EMR

AWS OFICIAL
AWS OFICIALAtualizada há 3 anos