Administración de recursos

Las canalizaciones te permiten especificar las CPU y la memoria para el controlador y cada ejecutor. Puedes establecer recursos en los parámetros de configuración de la canalización de Cloud Data Fusion Studio. Para obtener más información, consulta Administra la configuración de la canalización.

En esta página, se proporcionan lineamientos sobre la cantidad de recursos de controlador y ejecutor que debes configurar para tu caso de uso.

Driver

Dado que el controlador no realiza mucho trabajo, la configuración predeterminada de 1 CPU y 2 GB de memoria es suficiente para ejecutar la mayoría de las canalizaciones. Es posible que debas aumentar la memoria para las canalizaciones que contienen muchas etapas o esquemas grandes. Como se mencionó en Procesamiento paralelo de JOIN, si la canalización realiza uniones en la memoria, los conjuntos de datos en la memoria también deben caber en la memoria del controlador.

Executor

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

CPU

La cantidad de CPU asignadas a un ejecutor determina la cantidad de tareas que este puede ejecutar en paralelo. Cada partición de datos requiere una tarea que procesar. En la mayoría de los casos, es más sencillo configurar la cantidad de CPU en una y, en su lugar, enfocarse en ajustar la memoria.

Memoria

Para la mayoría de las canalizaciones, 4 GB de memoria del ejecutor son suficientes para ejecutar la canalización de forma correcta. Las uniones de varios terabytes muy sesgadas se completaron con 4 GB de memoria de ejecutor. Es posible mejorar la velocidad de ejecución si aumentas la cantidad de memoria, pero esto requiere una comprensión sólida de tus datos y de la canalización.

Spark divide la memoria en varias secciones. Una sección está reservada 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 es de alrededor del 60% de la memoria total. La propiedad spark.memory.fraction configuration de Spark (el valor predeterminado es 0.6) controla este porcentaje. Esta cantidad funciona bien para la mayoría de las cargas de trabajo y, por lo general, no necesita ajustarse.

La sección de almacenamiento y ejecución se divide, además, en espacios separados para el almacenamiento y la ejecución. De forma predeterminada, esos espacios son del mismo tamaño, pero puedes ajustarlos si configuras spark.memory.storageFraction (la configuración predeterminada es 0.5) para controlar qué porcentaje del espacio se reserva para el almacenamiento.

El espacio de almacenamiento almacena datos almacenados en caché. El espacio de ejecución almacena datos de Shuffle, JOIN, ordenamiento y agregación. Si hay espacio adicional en la sección de ejecución, Spark puede usar una parte para almacenar datos. Sin embargo, los datos de ejecución nunca usarán el espacio de almacenamiento.

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

Punto a tener en cuenta: memoria de contenedor YARN

La configuración de memoria del ejecutor controla la cantidad de memoria del montón que se asigna a los ejecutores. Spark agrega una cantidad adicional de memoria para la memoria fuera del montón, que se controla mediante la configuración spark.executor.memoryOverhead, que se establece en 384 m de forma predeterminada. Esto significa que la cantidad de memoria que reserva YARN para cada ejecutor es mayor que el número establecido en la configuración de recursos de la canalización. Por ejemplo, si configuras la memoria del ejecutor en 2,048 m, Spark agrega 384 m a ese número y solicita YARN para un contenedor de 2,432 m. Además de eso, YARN redondea el número de solicitud a un múltiplo de yarn.scheduler.increment-allocation-mb, que tiene el valor predeterminado yarn.scheduler.minimum-allocation-mb. Si está configurada en 512, YARN redondea los 2,432 m hasta los 2,560 m. Si el valor se establece en 1,024, YARN redondea hacia arriba los 2,432m a 3,072m. Es útil tener en cuenta este punto cuando determinas el tamaño de cada nodo trabajador en tu clúster.