Como resolver falhas de estágio de “não há mais espaço no dispositivo” no Spark no Amazon EMR?

3 minuto de leitura
0

Enviei uma aplicação do Apache Spark para um cluster do Amazon EMR. A aplicação apresenta uma falha de estágio “sem espaço no dispositivo” semelhante à seguinte: Trabalho abortado devido a uma falha de estágio: A tarefa 31 no estágio 8.0 falhou 4 vezes, falha mais recente: Tarefa perdida 31.3 no estágio 8.0 (TID 2036, ip-xxx-xxx-xx-xxx.compute.internal, executor 139): org.apache.spark.memory.SparkOutOfMemoryError: erro ao chamar spill() em org.apache.spark.util.collection.unsafe.sort.UnsafeExternalSorter@1a698b89 : Não há mais espaço no dispositivo

Breve descrição

O Spark usa discos locais nos nós principais e de tarefas para armazenar dados intermediários. Se os discos ficarem sem espaço, a tarefa falhará com o erro “não há mais espaço no dispositivo”. Use um dos métodos a seguir para resolver esse erro:

Resolução

Adicione mais capacidade do EBS

Para novos clusters: use volumes maiores do EBS

Inicie um cluster do Amazon EMR e escolha um tipo de instância do Amazon Elastic Compute Cloud (Amazon EC2) com volumes maiores do EBS. Para obter mais informações sobre a quantidade de armazenamento e o número de volumes alocados para cada tipo de instância, consulte Armazenamento padrão do Amazon EBS para instâncias.

Para clusters em execução: adicione mais volumes do EBS

1.    Se volumes maiores do EBS não resolverem o problema, conecte mais volumes do EBS aos nós principais e de tarefas.

2.    Formate e monte os volumes anexados. Certifique-se de usar o número de disco correto (por exemplo, /mnt1 ou /mnt2 em vez de /data).

3.    Conecte-se ao nó usando SSH.

4.    Crie um diretório /mnt2/yarn e, em seguida, defina a propriedade do diretório para o usuário do YARN:

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

5.    Adicione o diretório /mnt2/yarn dentro da propriedade yarn.nodemanager.local-dirs de /etc/hadoop/conf/yarn-site.xml. Exemplo:

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

6.    Reinicie o serviço NodeManager:

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

Adicione mais partições do Spark

Dependendo de quantos nós principais e de tarefas estão no cluster, considere aumentar o número de partições do Spark. Use o seguinte código Scala para adicionar mais partições do Spark:

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

Informações relacionadas

Como solucionar falhas de etapa em trabalhos do Spark no Amazon EMR?

AWS OFICIAL
AWS OFICIALAtualizada há 2 anos