Come posso risolvere gli errori di fase in cui non è rimasto spazio sul dispositivo in Spark su Amazon EMR?

3 minuti di lettura
0

Ho inviato un'applicazione Apache Spark a un cluster Amazon EMR. L'applicazione ha esito negativo con un errore di fase “Spazio esaurito sul dispositivo” simile al seguente: Processo interrotto a causa di un errore di fase: L'attività 31 nella fase 8.0 ha avuto esito negativo 4 volte, errore più recente: Attività 31.3 persa nella fase 8.0 TID 2036, ip-xxx-xxx-xx-xxx.compute.internal, executor 139): org.apache.spark.memory.SparkOutOfMemoryError: error while calling spill() on org.apache.spark.util.collection.unsafe.sort.UnsafeExternalSorter@1a698b89 : Spazio esaurito sul dispositivo

Breve descrizione

Spark utilizza dischi locali sui nodi core e task per archiviare dati intermedi. Se lo spazio sui dischi esaurisce, il processo ha esito negativo e viene visualizzato l'errore “Spazio sul dispositivo esaurito”. Utilizza uno dei seguenti metodi per risolvere questo errore:

  • Aggiungi ulteriore capacità di Amazon Elastic Block Store (Amazon EBS).
  • Aggiungi altre partizioni Spark.
  • Usa un'azione bootstrap per aumentare dinamicamente lo spazio di archiviazione sui nodi core e attività. Per ulteriori informazioni e un esempio di action script di bootstrap, consulta Aumentare dinamicamente lo spazio di archiviazione sui cluster Amazon EMR.

Soluzione

Aggiungi ulteriore capacità EBS

Per i nuovi cluster: usa volumi EBS più grandi

Avvia un cluster Amazon EMR e scegli un tipo di istanza Amazon Elastic Compute Cloud (Amazon EC2) con volumi EBS più grandi. Per ulteriori informazioni sulla quantità di spazio di archiviazione sul numero di volumi allocati per ogni tipo di istanza, consulta Spazio di archiviazione Amazon EBS predefinito per le istanze.

**Per i cluster in esecuzione: aggiungi altri volumi EBS **

1.    Se volumi EBS più grandi non risolvono il problema, collega più volumi EBS ai nodi core e attività.

2.    Formattare e montare i volumi allegati. Assicurarsi di utilizzare il numero di disco corretto (ad esempio, /mnt1 o /mnt2 anziché /data).

3.    Connettiti al nodo tramite SSH.

4.    Crea una directory ** /mnt2/yarn**, quindi imposta la proprietà della directory per l'utente YARN:

sudo mkdir /mnt2/yarn
chown yarn:yarn /mnt2/yarn

5.    Aggiungi la directory /mnt2/yarn all'interno della proprietà yarn.nodemanager.local-dirs di /etc/hadoop/conf/yarn-site.xml. Esempio:

<property>
    <name>yarn.nodemanager.local-dirs</name>
    <value>/mnt/yarn,/mnt1/yarn,/mnt2/yarn</value>
</property>

6.    Riavvia il servizio NodeManager:

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

Aggiungi altre partizioni Spark

A seconda del numero di nodi core e attività presenti nel cluster, valuta la possibilità di aumentare il numero di partizioni Spark. Usa il seguente codice Scala per aggiungere altre partizioni Spark:

val numPartitions = 500
val newDF = df.repartition(numPartitions)

Informazioni correlate

Come posso risolvere gli errori di fase nei processi Spark su Amazon EMR?

AWS UFFICIALE
AWS UFFICIALEAggiornata 2 anni fa