Pero una parte importante de los esfuerzos se han concentrado en mejorar el rendimiento de Spark. Sin duda este es uno de los temas clave para los usuarios de Spark. Concretamente en esta versión se presenta por primera vez un nuevo backend de ejecución como primera fase del proyecto Tungsten, que representa el mayor cambio hasta el momento del backend de Spark. Sobretodo se centra en mejorar la eficiencia de la CPU y la memoria. Podríamos resumir los cambios propuestos en estas tres cosas:

  • Hacer un aprovechamiento de la semántica de aplicación para la gestión de la memoria explícita y eliminar el overhead que representa el modelo de objetos de la JVM y el Garbage Collection.
  • Hacer la computación consciente de la cache con algoritmos y estructuras de datos para explotar jerarquía de memoria (L1/ L2/L3 CPU caches).
  • Hacer una generación de código que permita explotar los nuevos compiladores y CPUs disponibles actualmente.

Es interesante ver como cada vez queda más claro que la complejidad de las aplicaciones big data analytics recae en el cálculo y no tanto en los datos. Databricks argumenta que en los workloads de Spark que ellos manejan se constata que el cuello de botella se encuentra en la CPU y la memoria en lugar de las entrada/salidas o la comunicación por la red del cluster. Según ellos que el cuello de botella sea cada vez más la CPU se debe entre otras razones a que las configuraciones de hardware actuales ofrecen cada vez mayor ancho de banda agregado, tales como enlaces de 10 Gbps en redes y gran ancho de banda de SSD o arrays de HDD para el almacenamiento. Si están interesados en más detalle del proyecto Tungsten pueden visitar esta página.  Si prueban la nueva versión de Spark 1.5 en Databricks ya me contarán.

(*) Matei, el padre de la criatura!