Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

En este Q2 estamos trabajando para integrar un cluster Spark en plataforma.

Table of Contents
minLevel2
maxLevel7

Table of Contents
Info

Disponible a partir de versión 4.1.0 de Onesait Platform

Introducción

En este trimestre hemos comenzado con esta funcionalidad que continuaremos durante Q3. En el trimestre nos hemos centrado en el despliegue embebido de un cluster Spark junto con Plataforma junto con sus herramientas de visualización de jobs, además de en poder enviar jobs Spark a través de las herramientas de plataforma.

En la próxima release continuaremos trabajando en la integración de otros clusters (pj servicios de diferentes Clouds) y mejoras la integración con plataforma.

Análisis técnico

Elección del cluster de Spark

Spark permite distintos tipos de despliegues para cluster, entre los que tenemos: Standalone, Kubernetes, YARN y Mesos.

En primera instancia daremos la posibilidad de crear un cluster Standalone desplegado en kubernetesKubernetes. Esto tiene las ventajas de que tenemos elementos ya definidos como master y workers, pudiendo definir una infraestructura más fácil de gestionar. También nos facilita el acceso a las UIs y logs de cada nodo, ya que cada uno tendrá siempre una única función en el cluster. En futuras versiones añadiremos la posibilidad de conectarnos a Servicios de Spark como los de GCP Databricks, etc.

Versión e imagen de Spark

Vamos a crear una imagen de Spark 3.2.1 con soporte Hadoop 3.2 y AWS S3.

Esta imagen es custom de plataforma, para poder integrar nuestro nuestro MinIO como almacén de procesos (jars), facilitando el despliegue y ejecución de procesos Spark desde Plataforma.

Integración de Logs

También integraremos los logs de todos los elementos de Spark (Workers y Master) a Graylog. Para ello se ha añadido un conector UDP que agiliza la recolección de logs que ya teníamos. El resto de módulos podrán ser configurados para usar dicho conector. Esto nos permite ver en una única herramienta todos los logs de Spark.

...

Unificación de UI y seguridad

Si alguna vez habéis accedido a la UI de Spark, sabréis que cada nodo tiene su propia UI en puertos definidos por el administrador del cluster, lo que hace poder navegar por estas UIs fuera del cluster bastante tedioso (teniendo que abrir puertos, túneles, etc.). Para facilitar el acceso, navegación y uso, desde plataforma vamos a ofrecer acceso a dichas UIs (Master y workers) desde fuera del cluster.

Dado que permitiremos el uso de estas UIs desde plataforma, hemos creado un plugin de seguridad haciendo uso del token oauth generado por plataforma, para que solamente sus usuarios puedan acceder desde el propio ControlPanel.

...

Ejecución de

...

procesos Spark en plataforma

Para facilitar el lanzamiento de procesos Spark en plataforma nos vamos a apoyar en el uso de MinIO.

Al tener integrada la interfaz de AWS S3, desde nuestro cluster Spark podremos invocar procesos (jars) que estén subidos a un bucket de Minio desde la propia plataforma. Si permitiéramos la ejecución desde consola sería algo similar a este ejemplo:

...

Mediante el uso de SparkLauncher vamos a crear una API que nos permita seleccionar el proceso a lanzar (lo subirá subido a MinIO) y los parámetros más usuales configurables en runtime para Spark (nombre del proceso, uso de recursos, etc.).

Subimos a nuestro repositorio de objetos el JAR a ejecutar:

...

Lanzamos la ejecución desde la API con la parametrización necesaria:

...

Image Added

Y el proceso se lanzará en el cluster:

...

También tendremos en futuras versiones la posibilidad de configurar el módulo de Notebooks para que lance sus procesos Spark contra el cluster.

¡Esto es solo el principio!

En este Q2 solamente estamos empezando a integrar funcionalidades básicas. La idea es continuar en esta linea, permitiendo más y mejores funcionalidades como:

  • Creación de perfiles de ejecución: Permitir que los administradores asignen perfiles de recursos (ram/cores en workers/executors) y los asignen a los usuarios analytics que lancen los procesos para poder controlar el uso de recursos del cluster.

  • Control del ciclo de vida de procesos Spark: Al estilo de lo que ya está disponible para microservicios, queremos poder ofrecer a los usuarios la posibilidad de gestionar el ciclo de vida de sus procesos Spark, desde su desarrollo (integrándolo en Gitlab), despligue (compilación desde Jenkins), subida a MinIO y ejecución en el propio cluster de Spark, de manera sencilla desde el ControlPanel.

  • Conexión con otros cluster de Spark

  • Integración con Notebooks de plataforma