Perché l'applicazione YARN utilizza ancora le risorse dopo il completamento del processo Spark che ho eseguito su Amazon EMR?

4 minuti di lettura
0

Sto utilizzando un notebook Jupyter o Zeppelin sul mio cluster Amazon EMR. L'applicazione YARN continua a funzionare anche dopo il completamento del processo Apache Spark che ho inviato.

Breve descrizione

Quando esegui un notebook Spark in Zeppelin o Jupyter, Spark avvia un interprete. L'interprete crea un'applicazione YARN. Questa applicazione è il driver Spark che viene visualizzato quando si elencano le applicazioni. Il driver non viene terminato quando si finisce di eseguire un processo dal notebook. Per impostazione predefinita, il driver Spark rimane attivo in modo da poter richiedere contenitori di applicazioni per l'esecuzione immediata del codice. Il lato negativo è che l'applicazione YARN potrebbe utilizzare le risorse necessarie ad altri lavori. Per risolvere questo problema, è possibile interrompere manualmente l'applicazione YARN. In alternativa, è possibile impostare un valore di timeout che interrompa automaticamente l'applicazione.

Soluzione

Zeppelin

Opzione 1: riavvia l'interprete Spark

Prima di iniziare, assicurati di disporre delle autorizzazioni per riavviare l'interprete in Zeppelin.

1.    Apri Zeppelin.

2.    Dall'elenco a discesa accanto al nome utente, scegli Interprete.

3.    Trova l'interprete Spark, quindi scegli riavvia. Zeppelin termina il processo YARN quando l'interprete si riavvia.

Opzione 2: interrompi il processo YARN manualmente

Prima di iniziare, assicurati di quanto segue:

  • Hai accesso SSH al cluster Amazon EMR.
  • Hai l’autorizzazione a eseguire i comandi YARN.

Usa il comando -kill per terminare l'applicazione. Nell'esempio seguente, sostituisci application_id con l'ID dell'applicazione.

yarn application -kill application_id

Opzione 3: imposta un valore di timeout per l'interprete

Le versioni 0.8.0 e successive di Zeppelin (disponibili nelle versioni 5.18.0 e successive di Amazon EMR) includono una gestione del ciclo di vita per gli interpreti. Utilizza l'impostazione TimeoutLifecycleManager per terminare gli interpreti dopo un periodo di timeout di inattività specificato:

1.    Crea un file etc/zeppelin/conf/zeppelin-site.xml con il seguente contenuto. In questo esempio, il periodo di timeout è impostato su 120.000 millisecondi (2 minuti). Scegli un valore di timeout adatto al tuo 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.    Esegui i seguenti comandi per riavviare Zeppelin:

$ sudo stop zeppelin
$  sudo start zeppelin

Jupyter

Opzione 1: spegni il notebook manualmente

Una volta completato questo processo, utilizza uno dei seguenti metodi per arrestare il kernel nell'interfaccia utente di Jupyter:

  • Nell'interfaccia del notebook Jupyter, apri il menu File, quindi scegli Chiudi e interrompi.
  • Nella dashboard di Jupyter, apri la scheda Esecuzione. Scegli Shutdown per il notebook che desideri interrompere.

Opzione 2: arresta il kernel manualmente

Dall'interfaccia del notebook Jupyter, apri il menu Kernel, quindi scegli Shutdown.

Opzione 3: configura l'attributo timeout

Se chiudi la scheda del notebook o la finestra del browser prima di chiudere il kernel, il processo YARN continua a funzionare. Per evitare che ciò accada, configura l'attributo NotebookApp.shutdown_no_activity_timeout. Questo attributo termina il processo YARN dopo un periodo di timeout di inattività specificato, anche se chiudi la scheda o la finestra del browser.

Effettua le seguenti operazioni per configurare l'attributo NotebookApp.shutdown_no_activity_timeout:

1.    Apri il file /etc/jupyter/jupyter_notebook_config.py sul nodo principale, quindi aggiungi una voce simile alla seguente. In questo esempio, l'attributo timeout è impostato su 120 secondi. Scegli un valore di timeout adatto al tuo ambiente.

c.NotebookApp.shutdown_no_activity_timeout = 120

2.    Esegui i seguenti comandi per riavviare jupyterhub:

sudo docker stop jupyterhub
sudo docker start jupyterhub

Informazioni correlate

Apache Zeppelin

Considerazioni sull'utilizzo di Zeppelin su Amazon EMR

Notebook Jupyter su Amazon EMR

AWS UFFICIALE
AWS UFFICIALEAggiornata 3 anni fa