¿Cómo puedo evitar que la memoria caché de usuario de un trabajo de Hadoop o Spark consuma demasiado espacio en disco en Amazon EMR?

5 minutos de lectura
0

La memoria caché de usuario de mi trabajo en Apache Hadoop o Apache Spark ocupa todo el espacio en disco de la partición. El trabajo de Amazon EMR da error o el servicio HDFS NameNode está en modo seguro.

Breve descripción

En un clúster de Amazon EMR, YARN está configurado para permitir que los trabajos escriban datos de caché en /mnt/yarn/usercache. Al procesar una gran cantidad de datos o ejecutar varios trabajos simultáneos, el sistema de archivo /mnt puede llenarse. Esto provoca errores en el administrador de nodos en algunos nodos, lo que provoca que el trabajo se bloquee o dé error.

Utilice uno de los siguientes métodos para resolver este problema:

  • Ajustar la configuración de retención de la memoria caché de usuario para YARN NodeManager. Seleccione esta opción si no tiene trabajos de larga duración o trabajos de streaming.
  • Ampliar los volúmenes de Amazon Elastic Block Store (Amazon EBS). Seleccione esta opción si tiene trabajos de larga duración o trabajos de streaming.

Resolución

Opción 1: Ajustar la configuración de retención de la memoria 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 de 600 000 milisegundos. Después de este intervalo, y si el tamaño de la memoria caché supera el valor establecido en yarn.nodemanager.localizer.cache.target-size-mb, se eliminan los archivos que los contenedores en ejecución no estén utilizando.
  • yarn.nodemanager.localizer.cache.target-size-mb: Este es el espacio máximo en disco permitido para la memoria caché. El valor predeterminado es de 10 240 MB. Cuando el tamaño del disco de memoria caché supera este valor, los archivos que no utilicen los contenedores en ejecución se eliminan en el intervalo establecido en yarn.nodemanager.localizer.cache.cleanup.interval-ms.

Para configurar el intervalo de limpieza y el tamaño máximo de espacio en disco en un clúster en ejecución:

1.    Abra /etc/hadoop/conf/yarn-site.xml en cada nodo principal y de tarea y, a continuación, reduzca los valores yarn.nodemanager.localizer.cache.cleanup.interval y yarn.nodemanager.localizer.cache.target-size-mb. Por ejemplo:

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 el servicio NodeManager, ejecute los siguientes comandos en cada nodo principal y de tarea:

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

Nota: En la versión de lanzamiento 5.21.0 y posteriores de Amazon EMR, también puede utilizar un objeto de configuración, similar al siguiente, para anular la configuración del clúster o especificar clasificaciones de configuración adicionales para un clúster en ejecución. Para obtener más información, consulte Reconfigurar un grupo de instancias en un clúster en ejecución.

Para establecer el intervalo de limpieza y el tamaño máximo de espacio en disco en un clúster nuevo, añada un objeto de configuración similar al siguiente cuando inicie el clúster:

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

Recuerde que 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 memoria caché de usuario, es posible que los datos sigan llegando a la siguiente ruta y llenando el sistema de archivos:

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

Opción 2: Ampliar 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 de lanzamiento 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 de almacenamiento y la cantidad de volúmenes asignados de forma predeterminada para cada tipo de instancia, consulte Almacenamiento predeterminado de Amazon EBS para instancias.
  • Versión de lanzamiento 5.21 y anteriores de Amazon EMR: El tamaño de volumen de EBS predeterminado es de 32 GB. De esta cantidad, 27 GB están reservados para la partición /mnt. HDFS, YARN, la memoria caché de usuario y todas las aplicaciones utilizan la partición /mnt. Aumente el tamaño del volumen de EBS según sea necesario (por ejemplo, de 100 a 500 GB o más). También puede especificar varios volúmenes de EBS. Se montarán varios volúmenes de EBS como /mnt1, /mnt2, etc.

Para los trabajos de streaming de Spark, también puede realizar una operación no persistente (RDD.unpersist()) cuando el procesamiento haya terminado y los datos ya no sean necesarios. O bien, llame explícitamente a System.gc() en Scala ( sc._jvm.System.gc() en Python) para iniciar la recopilación de elementos no utilizados de JVM y eliminar los archivos aleatorios intermedios.


OFICIAL DE AWS
OFICIAL DE AWSActualizada hace 2 años