Como posso evitar que o cache do usuário de um trabalho do Hadoop ou do Spark consuma muito espaço em disco no Amazon EMR?

5 minuto de leitura
0

O cache do usuário do meu trabalho no Apache Hadoop ou Apache Spark está ocupando todo o espaço em disco na partição. O trabalho do Amazon EMR está falhando ou o serviço HDFS NameNode está no modo seguro.

Descrição resumida

Em um cluster do Amazon EMR, o YARN está configurado para permitir que trabalhos gravem dados de cache em /mnt/yarn/usercache. Quando você processa uma grande quantidade de dados ou executa vários trabalhos simultâneos, o sistema de arquivos /mnt pode ser preenchido. Isso causa falhas no gerenciador de nós em alguns nós, o que faz com que o trabalho congele ou falhe.

Use um dos seguintes métodos para resolver esse problema:

  • Ajuste as configurações de retenção de cache do usuário para o YARN NodeManager. Escolha essa opção se você não tiver trabalhos de longa duração ou trabalhos de streaming.
  • Aumente a escala verticalmente dos volumes do Amazon Elastic Block Store (Amazon EBS). Escolha essa opção se você tiver trabalhos de longa duração ou trabalhos de streaming.

Resolução

Opção 1: ajuste as configurações de retenção de cache do usuário para o NodeManager

Os seguintes atributos definem as configurações de limpeza do cache:

  • yarn.nodemanager.localizer.cache.cleanup.interval-ms: esse é o intervalo de limpeza do cache. O valor padrão é 600.000 milissegundos. Após esse intervalo, e se o tamanho do cache exceder o valor definido em yarn.nodemanager.localizer.cache.target-size-mb, os arquivos que não estão sendo usados pelos contêineres em execução serão excluídos.
  • yarn.nodemanager.localizer.cache.target-size-mb: esse é o espaço máximo em disco permitido para o cache. O valor padrão é 10.240%. Quando o tamanho do disco de cache excede esse valor, os arquivos que não estão em uso pelos contêineres em execução são excluídos no intervalo definido em yarn.nodemanager.localizer.cache.cleanup.interval-ms.

Para definir o intervalo de limpeza e o tamanho máximo do espaço em disco em um cluster em execução:

1.    Abra o /etc/hadoop/conf/yarn-site.xml em cada núcleo e nó de tarefa e, em seguida, reduza os valores de yarn.nodemanager.localizer.cache.cleanup.interval e yarn.nodemanager.localizer.cache.target-size-mb. Por exemplo:

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.    Para reiniciar o serviço NodeManager, execute os seguintes comandos em cada núcleo e nó de tarefa:

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

Observação: nas versões 5.21.0 e posteriores do Amazon EMR, você também pode usar um objeto de configuração, semelhante ao seguinte, para substituir a configuração do cluster ou especificar classificações de configuração adicionais para um cluster em execução. Para obter mais informações, consulte Reconfigurar um grupo de instâncias em um cluster em execução.

Para definir o intervalo de limpeza e o tamanho máximo do espaço em disco em um novo cluster, adicione um objeto de configuração semelhante ao seguinte ao iniciar o cluster:

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

Lembre-se de que o serviço de exclusão não é concluído nos contêineres em execução. Isso significa que, mesmo depois de ajustar as configurações de retenção de cache do usuário, os dados ainda podem estar sendo transferidos para o seguinte caminho e preenchendo o sistema de arquivos:

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

Opção 2: aumente a escala verticalmente dos volumes do EBS nos nós do cluster do EMR

Para aumentar a escala verticalmente do armazenamento em um cluster do EMR em execução, consulte Aumentar a escala verticalmente do armazenamento de forma dinâmica em clusters do Amazon EMR.

Para aumentar a escala verticalmente do armazenamento em um novo cluster do EMR, especifique um tamanho de volume maior ao criar o cluster do EMR. Você também pode fazer isso ao adicionar nós a um cluster existente:

  • Versão de lançamento do Amazon EMR 5.22.0 e posterior: a quantidade padrão de armazenamento do EBS aumenta com base no tamanho da instância do Amazon Elastic Compute Cloud (Amazon EC2). Para obter mais informações sobre a quantidade de armazenamento e o número de volumes alocados por padrão para cada tipo de instância, consulte Armazenamento padrão do Amazon EBS para instâncias.
  • Versões de lançamento do Amazon EMR 5.21 e anteriores: o tamanho padrão do volume do EBS é 32 GB. Desse valor, 27 GB são reservados para a partição /mnt. O HDFS, o YARN, o cache do usuário e todas as aplicações usam a partição /mnt. Aumente o tamanho do seu volume do EBS conforme necessário (por exemplo, 100-500 GB ou mais). Você também pode especificar vários volumes do EBS. Vários volumes do EBS serão montados como /mnt1, /mnt2 e assim por diante.

Para trabalhos de streaming do Spark, você também pode executar um unpersist ( RDD.unpersist()) quando o processamento estiver concluído e os dados não forem mais necessários. Ou chame explicitamente System.gc() em Scala ( sc._jvm.System.gc() em Python) para iniciar a coleta de resíduos da JVM e remover os arquivos shuffle intermediários.


AWS OFICIAL
AWS OFICIALAtualizada há 2 anos