Como faço para interromper o cache de usuário de um trabalho do Hadoop ou do Spark para que o cache não use muito espaço em disco no Amazon EMR?

4 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 os 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 ficar cheio. Isso faz com que o gerenciador de nós falhe em alguns nós e o trabalho congele ou falhe.

Para resolver esse problema, use um dos seguintes métodos:

  • Se você não tiver trabalhos de longa duração ou de streaming, ajuste as configurações de retenção de cache do usuário para o YARN NodeManager.
  • Se você tiver trabalhos de longa duração ou de streaming, aumente os volumes do Amazon Elastic Block Store (Amazon EBS).

Resolução

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, quando o tamanho do cache exceder o valor definido em yarn.nodemanager.localizer.cache.target-size-mb, os arquivos que os contêineres em execução não usam 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 MB. 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 no cluster, conclua as seguintes etapas:

  1. Abra /etc/hadoop/conf/yarn-site.xml em cada núcleo e nó de tarefa.

  2. Reduza os valores de yarn.nodemanager.localizer.cache.cleanup.interval e yarn.nodemanager.localizer.cache.target-size-mb para cada nó principal e de tarefa.

    Por exemplo:

    sudo vim /etc/hadoop/conf/yarn-site.xmlyarn.nodemanager.localizer.cache.cleanup.interval-ms 400000
    yarn.nodemanager.localizer.cache.target-size-mb 5120
  3. Execute os seguintes comandos em cada nó principal e de tarefa para reiniciar o NodeManager:
    EMR 5.29 e versões anteriores

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

    EMR 5.30.0 e versões posteriores

    sudo stop hadoop-yarn-nodemanager.service  
    sudo systemctl start hadoop-yarn-nodemanager.service
  4. 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 ,

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:

  • Amazon EMR versões 5.22.0 e posteriores: 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 para cada tipo de instância, consulte Armazenamento padrão do Amazon EBS para instâncias.
  • Amazon EMR versões 5.21 e posteriores: o tamanho padrão do volume do EBS é 32 GB. 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. Você também pode especificar vários volumes do EBS montados como /mnt1 ou /mnt2.

Para trabalhos de streaming do Spark, você também pode executar um RDD.unpersist() depois de não precisar mais dos dados. Ou chame explicitamente System.gc() em Scala ou 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 meses