Gestión de recursos

Las canalizaciones te permiten especificar las CPUs y la memoria que se asignarán al controlador y a cada ejecutor. Puede configurar recursos en las configuraciones de la canalización de Cloud Data Fusion Studio. Para obtener más información, consulta Gestionar configuraciones de la canalización.

En esta página se proporcionan directrices sobre la cantidad de recursos de controlador y ejecutor que debes configurar para tu caso práctico.

Controlador

Como el controlador no realiza mucho trabajo, los valores predeterminados de 1 CPU y 2 GB de memoria son suficientes para ejecutar la mayoría de las canalizaciones. Es posible que tengas que aumentar la memoria de las canalizaciones que contengan muchas fases o esquemas grandes. Como se menciona en Procesamiento paralelo de JOINs, si la canalización realiza combinaciones en memoria, los conjuntos de datos en memoria también deben caber en la memoria del controlador.

Ejecutor

Ten en cuenta las siguientes directrices sobre los recursos de CPU y memoria.

CPU

El número de CPUs asignadas a un ejecutor determina el número de tareas que el ejecutor puede ejecutar en paralelo. Cada partición de datos requiere una tarea para procesarse. En la mayoría de los casos, lo más sencillo es asignar una CPU y centrarse en ajustar la memoria.

Memoria

En la mayoría de las canalizaciones, 4 GB de memoria de ejecutor son suficientes para ejecutar la canalización correctamente. Se han completado uniones de varios terabytes con un sesgo importante con 4 GB de memoria de ejecutor. Puedes mejorar la velocidad de ejecución aumentando la cantidad de memoria, pero para ello debes conocer bien tus datos y tu canalización.

Spark divide la memoria en varias secciones. Una sección se reserva para el uso interno de Spark y otra para la ejecución y el almacenamiento.

De forma predeterminada, la sección de almacenamiento y ejecución ocupa aproximadamente el 60% de la memoria total. La propiedad spark.memory.fraction configuration de Spark (cuyo valor predeterminado es 0,6) controla este porcentaje. Esta cantidad funciona bien en la mayoría de las cargas de trabajo y, por lo general, no es necesario ajustarla.

La sección de almacenamiento y ejecución se divide en espacios independientes para el almacenamiento y la ejecución. De forma predeterminada, esos espacios tienen el mismo tamaño, pero puedes ajustarlos configurando spark.memory.storageFraction (el valor predeterminado es 0,5) para controlar qué porcentaje del espacio se reserva para el almacenamiento.

El espacio de almacenamiento almacena datos en caché. El espacio de ejecución almacena datos de aleatorización, unión, ordenación y agregación. Si hay espacio adicional en la sección de ejecución, Spark puede usar parte de él para almacenar datos. Sin embargo, los datos de ejecución nunca usarán espacio de almacenamiento.

Si sabes que tu canalización no almacena en caché ningún dato, puedes reducir la fracción de almacenamiento para dejar más espacio a los requisitos de ejecución.

Aspecto que debes tener en cuenta: memoria del contenedor de YARN

El ajuste de memoria del ejecutor controla la cantidad de memoria de montículo asignada a los ejecutores. Spark añade una cantidad adicional de memoria fuera del montículo, que se controla mediante el ajuste spark.executor.memoryOverhead, cuyo valor predeterminado es 384 m. Esto significa que la cantidad de memoria que YARN reserva para cada ejecutor es superior al número definido en la configuración de recursos de la canalización. Por ejemplo, si asignas 2048 m a la memoria del ejecutor, Spark añade 384 m a ese número y solicita a YARN un contenedor de 2432 m. Además, YARN redondea el número de solicitudes al múltiplo de yarn.scheduler.increment-allocation-mb más cercano, que tiene el valor predeterminado de yarn.scheduler.minimum-allocation-mb. Si se define en 512, YARN redondea 2432 m a 2560 m. Si el valor es 1024, YARN redondea 2432 m a 3072 m. Es importante tener en cuenta este punto a la hora de determinar el tamaño de cada nodo de trabajador de tu clúster.