Ir al contenido principal

¿Qué es Spark Tuning?

La optimización sistemática de las configuraciones de Apache Spark, el uso de memoria y las estrategias de ejecución para maximizar el rendimiento y evitar cuellos de botella en los recursos.

4 Personas Analytics AIBI

Summary

  • El ajuste de Spark ajusta la asignación de memoria entre el almacenamiento y la ejecución, gestiona la serialización de datos para el rendimiento de la red y optimiza las particiones aleatorias para evitar costosas sobrecargas de disco.
  • La Ejecución Adaptativa de Consultas (AQE) encuentra automáticamente las particiones aleatorias óptimas y resuelve la desviación de datos, mientras que el Optimizador Basado en Costos (CBO) utiliza estadísticas de tabla para seleccionar estrategias de unión eficientes.
  • Las técnicas avanzadas incluyen uniones de difusión para tablas pequeñas, pushdown de predicados para reducir la transferencia de datos y una gestión cuidadosa de la caché frente al almacenamiento en disco para el acceso repetido a los datos.

¿Qué es la optimización del rendimiento de Spark?

La optimización del rendimiento de Spark consiste en el proceso de ajustar la configuración de la memoria, los núcleos y las instancias que utiliza el sistema. Este proceso garantiza que Spark tenga un rendimiento impecable y también evita los cuellos de botella de recursos en Spark. Optimización del rendimiento de Spark

¿Qué es la serialización de datos?

Para reducir el uso de la memoria, es posible que debas almacenar los RDD de Spark en formato serializado. La serialización de datos también determina un buen rendimiento de la red. Obtendrás buenos resultados en el rendimiento de Spark de la siguiente manera:

  • Finalizar los trabajos que se ejecutan por mucho tiempo.
  • Garantizar que los trabajos se ejecuten en un motor de ejecución preciso.
  • Usar todos los recursos de manera eficiente.
  • Mejora del tiempo de rendimiento del sistema.

Spark admite dos bibliotecas de serialización, que son las siguientes:

  • Serialización de Java
  • Serialización Kryo

¿Qué es la optimización de memoria?

Al optimizar el uso de la memoria, hay tres aspectos que se destacan:

  • El dataset completo debe caber en la memoria; es fundamental tener en cuenta la memoria que utilizan sus objetos.
  • Al tener una alta rotación de objetos, la sobrecarga de la recolección de basura se vuelve una necesidad.
  • Deberás tener en cuenta el costo de acceder a esos objetos.
LÍDER 5X

Gartner®: Databricks, líder en bases de datos en la nube

¿Qué es la optimización de la estructura de datos?

Una opción para reducir el consumo de memoria es evitar las características de Java que podrían generar sobrecarga. A continuación, se indican algunas formas de hacerlo:

  • En caso de que el tamaño de la RAM sea inferior a 32 GB, el indicador de la JVM debe establecerse en –xx:+UseCompressedOops. Esta operación creará un puntero de cuatro bytes en lugar de ocho.
  • Las estructuras anidadas se pueden evitar usando varios objetos pequeños y punteros.
  • En lugar de usar cadenas de texto para las claves, puede usar ID numéricos y objetos enumerados.

¿Qué es la optimización de la recolección de basura?

Para evitar la gran “rotación” relacionada con los RDD que el programa almacenó anteriormente, Java descartará los objetos antiguos para crear espacio para los nuevos. Sin embargo, al usar estructuras de datos con menos objetos, el costo se reduce considerablemente. Un ejemplo de esto sería el uso de un array de Ints en lugar de una lista enlazada. Como alternativa, podrías usar objetos en formato serializado, de manera que solo tendrás un único objeto por cada partición de RDD.

¿Qué es la gestión de memoria?

Un uso eficiente de la memoria es esencial para un buen rendimiento. Spark utiliza la memoria principalmente para el almacenamiento y la ejecución. La memoria de almacenamiento se utiliza para almacenar datos en caché que se reutilizarán más adelante. Por otro lado, la memoria de ejecución se usa para los cómputos en shuffles, sorts, joins y agregaciones. La contención de memoria plantea tres desafíos para Apache Spark:

  • ¿Cómo arbitrar la memoria entre la ejecución y el almacenamiento?
  • ¿Cómo arbitrar la memoria entre las tareas que se ejecutan simultáneamente?
  • ¿Cómo arbitrar la memoria entre los operadores que se ejecutan dentro de la misma tarea?

En lugar de evitar reservar memoria de forma estática por adelantado, podrías lidiar con la contención de memoria cuando surja forzando a los miembros a hacer spill.
 

Recursos adicionales

No te pierdas ninguna publicación de Databricks.

Suscríbete a nuestro blog y recibe las últimas publicaciones en tu bandeja de entrada.