¿Cómo puedo detener la caché de usuario de un trabajo de Hadoop o Spark para que no utilice demasiado espacio de disco en Amazon EMR?

4 minutos de lectura
0

La caché de usuario para mi trabajo de Apache Hadoop o Apache Spark utiliza todo el espacio de disco en la partición. El trabajo de Amazon EMR da error o el servicio HDFS NameNode se encuentra en modo seguro.

Breve descripción

En un clúster de Amazon EMR, la configuración de YARN permite que los trabajos puedan escribir datos de caché en /mnt/yarn/usercache. Cuando se procesa una gran cantidad de datos o se ejecutan varios trabajos simultáneamente, es posible que el sistema de archivos /mnt se llene. Esto hace que el administrador de nodos falle en algunos nodos y que el trabajo se congele o falle.

Para solucionar este problema, utilice uno de estos métodos:

  • Si no tiene trabajos de ejecución prolongada o de transmisión, ajuste la configuración de retención de la caché de usuario para YARN NodeManager.
  • Si tiene trabajos de larga duración o de transmisión, escale verticalmente los volúmenes de Amazon Elastic Block Store (Amazon EBS).

Solución

Ajuste de la configuración de retención de la caché de usuario para NodeManager

Los siguientes atributos definen la configuración de limpieza de la memoria caché:

  • yarn.nodemanager.localizer.cache.cleanup.interval-ms: Este es el intervalo de limpieza de la memoria caché. El valor predeterminado es 600 000 milisegundos. Después de este intervalo, cuando el tamaño de la caché supera el valor establecido en yarn.nodemanager.localizer.cache.target-size-mb, se eliminan los archivos que no están siendo utilizados por los contenedores en ejecución.
  • yarn.nodemanager.localizer.cache.target-size-mb: este es el espacio máximo de disco permitido para la caché. El valor predeterminado es 10 240 MB. Si el tamaño de disco de la caché supera este valor, los archivos que los contenedores en ejecución no utilicen se eliminarán en el intervalo establecido en yarn.nodemanager.localizer.cache.cleanup.interval-ms.

Para establecer el intervalo de limpieza y el tamaño máximo de espacio de disco en el clúster, siga estos pasos:

  1. Abra /etc/hadoop/conf/yarn-site.xml en cada nodo principal y de tarea.

  2. Reduzca los valores de yarn.nodemanager.localizer.cache.cleanup.interval y yarn.nodemanager.localizer.cache.target-size-mb para cada nodo principal y de tarea.

    Por ejemplo:

    sudo vim /etc/hadoop/conf/yarn-site.xmlyarn.nodemanager.localizer.cache.cleanup.interval-ms 400000
    yarn.nodemanager.localizer.cache.target-size-mb 5120
  3. Ejecute los siguientes comandos en cada nodo principal y de tareas para reiniciar NodeManager:
    EMR 5.29 y versiones anteriores

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

    EMR 5.30.0 y versiones posteriores

    sudo stop hadoop-yarn-nodemanager.service  
    sudo systemctl start hadoop-yarn-nodemanager.service
  4. Para establecer el intervalo de limpieza y el tamaño máximo de espacio de disco en un clúster nuevo en el momento de la iniciación, añada un objeto de configuración similar al siguiente:

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

    El servicio de eliminación no se completa en los contenedores en ejecución. Esto significa que, incluso después de ajustar la configuración de retención de la caché de usuario, es posible que los datos lleguen de todos modos a la siguiente ruta y llenen el sistema de archivos:

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

Escalado vertical de los volúmenes de EBS en los nodos del clúster de EMR

Para ampliar el almacenamiento en un clúster de EMR en ejecución, consulte Ampliar de forma dinámica el almacenamiento en clústeres de Amazon EMR.

Para ampliar el almacenamiento en un nuevo clúster de EMR, especifique un tamaño de volumen mayor cuando cree el clúster de EMR. También puede hacerlo cuando añada nodos a un clúster existente:

  • Versión 5.22.0 y posteriores de Amazon EMR: La cantidad predeterminada de almacenamiento de EBS aumenta en función del tamaño de la instancia de Amazon Elastic Compute Cloud (Amazon EC2). Para obtener más información sobre la cantidad predeterminada de almacenamiento y el número de volúmenes de cada tipo de instancia, consulte Default Amazon EBS storage for instances.
  • Versión 5.21 y anteriores de Amazon EMR: El tamaño de volumen de EBS predeterminado es de 32 GB. Se reservan 27 GB para la partición ** /mnt. ** HDFS, YARN, la caché de usuario y todas las aplicaciones utilizan la partición /mnt. Aumente el tamaño del volumen de EBS según sea necesario. También puede especificar varios volúmenes de EBS que se monten como /mnt1 o /mnt2.

En el caso de los trabajos de transmisión de Spark, también puede utilizar RDD.unpersist() cuando ya no necesite los datos. Como alternativa, puede llamar explícitamente a System.gc() en Scala o a sc._jvm.System.gc() en Python para iniciar la recopilación de elementos no utilizados de JVM y eliminar los archivos intermedios de la mezcla.

OFICIAL DE AWS
OFICIAL DE AWSActualizada hace 2 meses