Administración de recursos

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

Esta página proporciona los lineamientos sobre cuántos recursos de controlador y ejecutor deben configurarlo para tu caso de uso.

Driver

Dado que el controlador no realiza demasiado trabajo, el valor predeterminado 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 canalizaciones que contienen muchas etapas o esquemas grandes. Como se menciona en Procesamiento paralelo de JOIN, si la canalización se realiza 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 ejecutor puede ejecutarse en paralelo. Cada partición de datos requiere una tarea para el proceso de administración de recursos. En la mayoría de los casos, es más sencillo configurar la cantidad de CPU en una en lugar de eso, concéntrate en ajustar la memoria.

Memoria

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

Spark divide la memoria en varias secciones. Hay una sección reservada para Spark el uso interno, y otro es para la ejecución y el almacenamiento.

De forma predeterminada, la sección de almacenamiento y ejecución es aproximadamente el 60% de la memoria total. Propiedad spark.memory.fraction configuration de Spark (el valor predeterminado es 0.6) controla este porcentaje. Este valor funciona bien para la mayoría de las cargas de trabajo y, por lo general, no es necesario ajustarlo.

La sección de almacenamiento y ejecución se divide, además, en espacios separados el almacenamiento y la ejecución. De forma predeterminada, esos espacios son del mismo tamaño, pero puedes ajustarlos estableciendo spark.memory.storageFraction (el valor predeterminado es 0.5) como 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 redistribución, unión, ordenación y agregación. Si hay espacio adicional en la sección de ejecución, Spark puede usar una parte para los datos de almacenamiento. Sin embargo, los datos de ejecución nunca usan el espacio de almacenamiento.

Si sabes que tu canalización no almacena datos en caché, puedes reducir fracción para 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 les 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 tiene como valor predeterminado 384 m Esto significa que la cantidad de memoria que YARN reserva para cada ejecutor mayor al número establecido en la configuración de recursos de la canalización. Por ejemplo: si estableces la memoria del ejecutor en 2,048 m, Spark agrega 384 m a ese número y solicita YARN para un contenedor de 2,432m Además, YARN redondea el número de solicitudes hasta un múltiplo de yarn.scheduler.increment-allocation-mb, que se establece de forma predeterminada en el valor de yarn.scheduler.minimum-allocation-mb. Si se establece en 512, YARN redondea los 2,432 m hasta los 2,560 m. Si el valor se establece en 1024, YARN redondea hacia arriba 2,432 m a 3,072 m Este punto es útil para tener en cuenta cuando determines el tamaño de cada nodo trabajador en tu clúster.