Come faccio a evitare che la cache dell'utente di un job Hadoop o Spark occupi troppo spazio su disco in Amazon EMR?

4 minuti di lettura
0

La cache dell'utente per il mio job Apache Hadoop o Apache Spark occupa tutto lo spazio su disco della partizione. Il job Amazon EMR fallisce o il servizio NameNode HDFS è in modalità sicura.

Breve descrizione

In un cluster Amazon EMR, YARN è configurato per consentire ai job di scrivere dati della cache su /mnt/yarn/usercache. Quando elabori una grande quantità di dati o esegui più job simultaneamente, il file system /mnt può riempirsi. Ciò causa errori relativi alla gestione in alcuni nodi e questi errori a loro volta provocano il blocco o la non riuscita del job.

Utilizza uno dei seguenti metodi per risolvere questo problema:

  • Regola le impostazioni di conservazione della cache dell'utente per YARN NodeManager. Scegli questa opzione se non hai job di lunga durata o job di streaming.
  • Aumenta i volumi Amazon Elastic Block Store (Amazon EBS). Scegli questa opzione se hai job di lunga durata o di streaming.

Risoluzione

Opzione 1: regola le impostazioni di conservazione della cache dell'utente per NodeManager

I seguenti attributi definiscono le impostazioni di pulizia della cache:

  • yarn.nodemanager.localizer.cache.cleanup.interval-ms: si tratta dell'intervallo di pulizia della cache. Il valore predefinito è 600.000 millisecondi. Dopo questo intervallo, e se la dimensione della cache supera il valore impostato in yarn.nodemanager.localizer.cache.target-size-mb, i file non utilizzati dai container in esecuzione vengono eliminati.
  • yarn.nodemanager.localizer.cache.target-size-mb: si tratta dello spazio massimo su disco consentito per la cache. Il valore predefinito è 10.240 MB. Quando la dimensione della cache su disco supera questo valore, i file non utilizzati dai container in esecuzione vengono eliminati nell'intervallo impostato in yarn.nodemanager.localizer.cache.cleanup.interval-ms.

Per impostare l'intervallo di pulizia e lo spazio massimo su disco in un cluster in esecuzione:

1.    Apri /etc/hadoop/conf/yarn-site.xml in ogni nodo principale e nodo attività e poi riduci i valori di yarn.nodemanager.localizer.cache.cleanup.interval e yarn.nodemanager.localizer.cache.target-size-mb. Ad esempio:

sudo vim /etc/hadoop/conf/yarn-site.xml

yarn.nodemanager.localizer.cache.cleanup.interval-ms 400000
yarn.nodemanager.localizer.cache.target-size-mb 5120

2.    Per riavviare il servizio NodeManager, esegui i seguenti comandi su ogni nodo principale e nodo attività:

sudo stop hadoop-yarn-nodemanager
sudo start hadoop-yarn-nodemanager

Nota: in Amazon EMR versione 5.21.0 e successive, puoi anche utilizzare un oggetto di configurazione, simile al seguente, per sovrascrivere la configurazione del cluster o specificare classificazioni di configurazione aggiuntive per un cluster in esecuzione. Per maggiori informazioni, consulta Riconfigurazione di un gruppo di istanze in un cluster in esecuzione.

Per impostare l'intervallo di pulizia e lo spazio massimo su disco in un nuovo cluster, aggiungi un oggetto di configurazione simile al seguente quando avvii il cluster:

[
    {
      "Classification": "yarn-site",
     "Properties": {
       "yarn.nodemanager.localizer.cache.cleanup.interval-ms": "400000",
       "yarn.nodemanager.localizer.cache.target-size-mb": "5120"
      }
    }
]

Ricorda che il servizio di eliminazione non viene completato sui container in esecuzione. Ciò significa che anche dopo che avrai modificato le impostazioni di conservazione della cache dell'utente, i dati potrebbero continuare a finire nel seguente percorso e a riempire il file system:

{'yarn.nodemanager.local-dirs'}/usercache/user/appcache/application_id ,

Opzione 2: aumenta i volumi EBS nei nodi del cluster EMR

Per aumentare l'archiviazione su un cluster EMR in esecuzione, consulta Aumento dinamico dell'archiviazione sui cluster Amazon EMR.

Per aumentare l'archiviazione su un nuovo cluster EMR, specifica una dimensione del volume maggiore quando crei il cluster EMR. Puoi farlo anche quando aggiungi nodi a un cluster esistente:

  • Amazon EMR versione 5.22.0 e successive: la quantità predefinita di archiviazione EBS aumenta in base alle dimensioni dell'istanza Amazon Elastic Compute Cloud (Amazon EC2). Per maggiori informazioni sullo spazio di archiviazione e sul numero di volumi allocati per impostazione predefinita per ogni tipo di istanza, consulta Archiviazione Amazon EBS di default per istanze.
  • Amazon EMR versione 5.21 e precedenti: la dimensione predefinita del volume EBS è 32 GB. Di questi 32 GB, 27 GB sono riservati alla partizione /mnt. HDFS, YARN, la cache dell'utente e tutte le applicazioni utilizzano la partizione /mnt. Aumenta le dimensioni del volume EBS in base alle tue esigenze (ad esempio, 100-500 GB o più). Puoi anche specificare più volumi EBS, i quali verranno montati come /mnt1, /mnt2 e così via.

Per i job di streaming di Spark, puoi anche eseguire il metodo RDD.unpersist() al termine dell'elaborazione e quando non ti servono più i dati. In alternativa, puoi richiamare esplicitamente System.gc() in Scala (sc._jvm.System.gc() in Python) per iniziare la rimozione di oggetti inutili (garbage collection) e rimuovere i file shuffle intermedi.


AWS UFFICIALE
AWS UFFICIALEAggiornata 2 anni fa