Administración de recursos

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

En esta página, se proporcionan los 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 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 las canalizaciones que contienen muchas etapas o esquemas grandes. Como se menciona en Procesamiento en paralelo de UNION, 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 CPUs asignadas a un ejecutor determina la cantidad 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, es más sencillo establecer la cantidad de CPUs en uno 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 ejecutarlas correctamente. Se completaron las uniones de varios terabytes muy sesgadas con 4 GB de memoria del ejecutor. Es posible mejorar la velocidad de ejecución si se aumenta la cantidad de memoria, pero esto requiere un conocimiento profundo de tus datos y tu 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 representa aproximadamente el 60% de la memoria total. La propiedad spark.memory.fraction configuration de Spark (que se establece de forma predeterminada en 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 en espacios separados 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 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 parte de él para almacenar datos. Sin embargo, los datos de ejecución nunca usarán parte del 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 para los requisitos de ejecución.

Punto a tener en cuenta: Memoria del contenedor de 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 el parámetro de configuración spark.executor.memoryOverhead, que se establece de forma predeterminada en 384 M. Eso significa que la cantidad de memoria que YARN reserva para cada ejecutor es superior a la cantidad establecida en la configuración de recursos de la canalización. Por ejemplo, si estableces la memoria del ejecutor en 2048 M, Spark agrega 384 M a esa cantidad y solicita a YARN un contenedor de 2432 M. 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 2,560 m. Si el valor se establece en 1024, YARN redondea los 2,432 MB a 3,072 MB. Este punto es útil para tener en cuenta cuando se determina el tamaño de cada nodo trabajador en el clúster.