11 min de lectura

Cómo ejecutar Apache Spark en Kubernetes en menos de 5 minutos

You can have Apache Spark up and running on Kubernetes in just 5minutes.


Herramientas como Ilum contribuirán en gran medida a simplificar el proceso de instalación de Apache Spark en Kubernetes. Esta guía te guiará, paso a paso, a través de cómo ejecutar correctamente Spark en tu clúster de Kubernetes. Con Ilum, la implementación, la administración y el escalado de clústeres de Apache Spark se realizan de manera fácil y natural.

Introducción

Hoy, mostraremos cómo ponerse en marcha con Apache Spark en K8s. Hay muchas formas de hacerlo, pero la mayoría son complejas y requieren varias configuraciones. Utilizaremos Ilum ya que eso hará toda la configuración del clúster por nosotros. En la próxima entrada del blog, compararemos el uso con el operador Spark.

Spark on Kubernetes with Ilum

Ilum es un data lakehouse modular y gratuito para implementar y administrar fácilmente clústeres de Apache Spark. Tiene una API simple para definir y administrar Spark, se encargará de todas las dependencias. Ayuda con la creación de su propia chispa administrada.

Con Ilum, puede implementar clústeres de Spark en cuestión de minutos y empezar a ejecutar aplicaciones de Spark de inmediato. Ilum le permite escalar fácilmente hacia afuera y en sus clústeres de Spark, administrando varios clústeres de Spark desde una sola interfaz de usuario.

Con Ilum, empezar es fácil si eres relativamente nuevo en Apache Spark en Kubernetes.

Guía paso a paso para instalar Apache Spark en Kubernetes

Inicio rápido

Suponemos que tienes un clúster de Kubernetes en funcionamiento, en caso de que no lo tengas, echa un vistazo a estas instrucciones para configurar un clúster de Kubernetes en el minikube. Comprueba cómo instalar minikube .

Configuración de un clúster de Kubernetes local

  • Instalar Minikube: Ejecute el siguiente comando para instalar Minikube junto con los recursos recomendados. Esto instalará Minikube con 6 vCPU y 12288 MB de memoria, incluido el complemento de servidor de métricas que es necesario para el monitoreo.
minikube start --cpus 6 --memory 12288 --addons metrics-server 

Una vez que tenga un clúster de Kubernetes en ejecución, está a solo unos pocos comandos de distancia para instalar Ilum:

Instalar Spark en Kubernetes con Ilum

  1. Agregar Repositorio de Ilum Helm
Helm Repo Añadir Ilum https://charts.ilum.cloud 
  1. Instala Ilum en tu clúster
Instalación del timón e ile/el 
💡
La velocidad lenta de Internet y el gran tamaño de la imagen de la ventana acoplable pueden provocar el error del pod de Kubernetes debido al tiempo de espera de descarga de 2 minutos. Es por eso que recomendamos extraer la imagen manualmente sin que se agote el tiempo de espera.

minikube ssh docker pull ilum/core:6.2.0

Esta configuración debería tardar unos dos minutos. Ilum se implementará en su clúster de Kubernetes, preparándolo para manejar trabajos de Spark.

Spark on Kubernetes with Ilum

Una vez instalado Ilum, puede acceder a la interfaz de usuario con port-forward y localhost:9777.

  1. Reenvío de puertos a la interfaz de usuario de acceso: Utilice el reenvío de puertos de Kubernetes para acceder a la interfaz de usuario de Ilum.
kubectl port-forward svc/ilum-ui 9777:9777 

Uso admin/admin como credenciales predeterminadas. Puede cambiarlos durante el Proceso de implementación .

Spark on Kubernetes with Ilum

Eso es todo, el clúster de Kubernetes ahora está configurado para manejar trabajos de Spark. Ilum proporciona una API y una interfaz de usuario sencillas que facilitan el envío de aplicaciones de Spark. También puedes usar el viejo Envío de Spark .

Implementación de la aplicación Spark en Kubernetes

Comencemos ahora un trabajo de chispa simple. Usaremos el ejemplo "SparkPi" de Spark documentación . Puede usar el archivo jar de este enlace .

ilum agregar trabajo de Spark

Ilum creará un pod de Kubernetes del controlador de Spark, que utiliza la imagen de Docker de la versión 3.x de Spark. Puede controlar el número de pods de ejecutor de Spark escalándolos a varios nodos. Esa es la forma más sencilla de enviar solicitudes de Spark a K8s.

Spark on Kubernetes with Ilum

Ejecutar Spark en Kubernetes es realmente fácil y sin fricciones con Ilum. Configurará todo el clúster y le presentará una interfaz en la que puede administrar y supervisar el clúster de Spark. Creemos que las aplicaciones de Spark en Kubernetes son el futuro del big data. Con Kubernetes, las aplicaciones de Spark podrán manejar grandes volúmenes de datos de forma mucho más fiable, proporcionando así información exacta y siendo capaces de impulsar decisiones con big data.

Envío de una aplicación de Spark a Kubernetes (estilo antiguo)

El envío de un trabajo de Spark a un clúster de Kubernetes implica el uso de la propiedad Envío de chispas script con configuraciones específicas de Kubernetes. Aquí tienes una guía paso a paso:

Pasos :

  1. Preparación de la aplicación Spark : Empaqueta la aplicación de Spark en un archivo JAR (para Scala/Java) o en un script de Python.

  2. Uso Envío de chispas para implementar : Ejecute el método Envío de chispas con opciones específicas de Kubernetes:

    ./bin/spark-submit \
      --maestro k8s://https://<k8s-apiserver-host>:<k8s-apiserver-port> \
      --deploy-mode cluster \
      --nombre spark-app \
      --class org.apache.spark.examples.SparkPi \
      --conf spark.executor.instances=3 \
      --conf spark.kubernetes.container.image=<your-spark-image> \
      local:///path/to/your-app.jar 

    Reemplazar:

    • <k8s-apiserver-host> : El host del servidor de la API de Kubernetes.
    • <k8s-apiserver-port> : El puerto del servidor de la API de Kubernetes.
    • <your-spark-image> : La imagen de Docker que contiene Spark.
    • local:///path/to/your-app.jar : Ruta de acceso al archivo JAR de la aplicación dentro de la imagen de Docker.

Configuraciones clave :

  • --maestro : Especifica la URL de la API de Kubernetes.
  • --modo-de-despliegue : Establézcalo en clúster para ejecutar el controlador dentro del clúster de Kubernetes.
  • --nombre : Asigna un nombre a la aplicación de Spark.
  • --clase : Clase principal de la aplicación.
  • --conf spark.ejecutor.instancias : Número de pods ejecutores.
  • --conf spark.kubernetes.container.image : Imagen de Docker para pods de Spark.

Para obtener más detalles, consulte la Documentación de Apache Spark sobre la ejecución en Kubernetes .

2. Creación de una imagen de Docker personalizada para Spark

La creación de una imagen de Docker personalizada permite empaquetar la aplicación de Spark y sus dependencias, lo que garantiza la coherencia en todos los entornos.

Pasos :

  1. Creación de un Dockerfile : Defina el entorno y las dependencias.

    # Usa la imagen base oficial de Spark
    DE chispa:3.5.3
    
    # Establecer variables de entorno
    ENV SPARK_HOME=/opt/chispa
    RUTA ENV=$PATH:$SPARK_HOME/bin
    
    # Copie el archivo JAR de su aplicación en la imagen
    COPIAR your-app.jar $SPARK_INICIO/ejemplos/frascos/
    
    # Establezca el punto de entrada para ejecutar su aplicación
    ENTRYPOINT ["spark-submit", "--class", "org.apache.spark.examples.SparkPi", "--master", "local[4]", "/opt/spark/examples/jars/your-app.jar"] 

    En este Dockerfile:

    • DE chispa:3.5.3 : Utiliza la imagen oficial de Spark como base.
    • ENV : Establece variables de entorno para Spark.
    • COPIAR : Agrega el archivo JAR de la aplicación a la imagen.
    • PUNTO DE ENTRADA : Define el comando predeterminado para ejecutar la aplicación Spark.
  2. Compilación de la imagen de Docker : Utilice Docker para crear su imagen.

    compilación de Docker -t tu-repositorio/tu-aplicación-de-Spark:latest . 

    Reemplazar tu-repositorio/tu-aplicación-de-Spark con el repositorio de Docker y el nombre de la imagen.

  3. Insertar la imagen en un registro : Cargue la imagen en un registro de Docker al que pueda acceder el clúster de Kubernetes.

    docker push your-repo/your-spark-app:latest 

Al usar Envío de chispas es un método común para implementar aplicaciones de Spark, puede que no sea el enfoque más eficaz para los entornos de producción. Los envíos manuales pueden dar lugar a incoherencias y son difíciles de integrar en los flujos de trabajo automatizados. Para mejorar la eficiencia y la capacidad de mantenimiento, se recomienda aprovechar la API REST de Ilum.

Automatización de implementaciones de Spark con la API REST de Ilum

Ilum ofrece una sólida API RESTful que permite una interacción fluida con los clústeres de Spark. Esta API facilita la automatización de los envíos, la supervisión y la gestión de trabajos, lo que la convierte en una opción ideal para las canalizaciones de integración continua/implementación continua (CI/CD).

Beneficios de usar la API REST de Ilum:

  • Automatización : Integre los envíos de trabajos de Spark en las canalizaciones de CI/CD, lo que reduce la intervención manual y los posibles errores.
  • Consistencia : Garantice procesos de implementación uniformes en diferentes entornos.
  • Escalabilidad : Administre fácilmente varios clústeres y trabajos de Spark mediante programación.

Ejemplo: Envío de un trabajo de Spark a través de la API REST de Ilum

Para enviar un trabajo de Spark utilizando la API REST de Ilum, puede realizar una solicitud HTTP POST con los parámetros necesarios. A continuación, se muestra un ejemplo simplificado de uso rizo :

curl -X POST https://<ilum-server>/api/v1/job/submit \
  -h "Tipo-de-contenido: multiparte/datos-de-formulario" \
  -F "nombre=ejemplo-trabajo" \
  -F "nombredelclúster=por defecto" \
  -f "jobClass=org.apache.spark.examples.SparkPi" \
  -F "frascos=@/ruta/a/your-app.jar" \
  -f "jobConfig=spark.executor.instances=3; spark.executor.memory=4g" 

En este comando:

  • nombre : Especifica el nombre del trabajo.
  • clusterName : Indica el clúster de destino.
  • jobClass : Define la clase principal de la aplicación Spark.
  • Frascos : Carga el archivo JAR de la aplicación.
  • jobConfig : Establece las configuraciones de Spark, como el número de ejecutores y la asignación de memoria.

Para obtener información detallada sobre los puntos de conexión y los parámetros de la API, consulte la Documentación de la API de Ilum .

Mejora de la eficiencia con Spark Jobs interactivos

Más allá de la automatización de los envíos de trabajos, la transformación de los trabajos de Spark en microservicios interactivos puede optimizar significativamente la utilización de los recursos y los tiempos de respuesta. Ilum admite la creación de sesiones interactivas de Spark de larga duración que pueden procesar datos en tiempo real sin la sobrecarga de inicializar un nuevo contexto de Spark para cada solicitud.

Ventajas de los trabajos interactivos de Spark:

  • Latencia reducida : Elimina la necesidad de iniciar un nuevo contexto de Spark para cada trabajo, lo que permite una ejecución más rápida.
  • Optimización de recursos : Mantiene un contexto de Spark persistente, lo que permite una administración eficiente de los recursos.
  • Escalabilidad : Controla varias solicitudes simultáneamente dentro de la misma sesión de Spark.

Para implementar un trabajo interactivo de Spark con Ilum, puede definir una aplicación de Spark que escuche los datos entrantes y los procese en tiempo real. Este enfoque es particularmente beneficioso para aplicaciones que requieren procesamiento y respuesta de datos inmediatos.

Para obtener una guía completa sobre la configuración de trabajos interactivos de Spark y la optimización del clúster de Spark, consulte la entrada de blog de Ilum: Cómo optimizar el clúster de Spark con trabajos interactivos de Spark .

Al integrar la API REST de Ilum y adoptar trabajos interactivos de Spark, puede optimizar sus flujos de trabajo de Spark, mejorar la automatización y lograr un entorno de procesamiento de datos más eficiente y escalable.

Ventajas de usar Ilum para ejecutar Spark en Kubernetes

Ilum está equipado con una interfaz de usuario intuitiva y una API resistente para escalar y manejar clústeres de Spark, configurando un par de aplicaciones de Spark desde una interfaz. Aquí hay algunas características excelentes en ese sentido:

  1. Facilidad de uso : Ilum simplifica la configuración y gestión de Spark en Kubernetes con una interfaz de usuario intuitiva de Spark, lo que elimina los complejos procesos de configuración.
  2. Implementación rápida: Configure, implemente y escale clústeres de Spark en minutos para acelerar el tiempo de ejecución y prueba de aplicaciones de inmediato.
  3. Escalabilidad: Con la API de Kubernetes, escale fácilmente los clústeres de Spark hacia arriba o hacia abajo para satisfacer sus necesidades de procesamiento de datos, lo que garantiza una utilización óptima de los recursos.
  4. Modularidad : Ilum viene con un marco modular que permite a los usuarios elegir y combinar diferentes componentes, como Spark History Server, Apache Jupyter, Minio y mucho más.

Migración desde Apache Hadoop Yarn

Ahora que Apache Hadoop Yarn se encuentra en un profundo estancamiento, cada vez más organizaciones buscan migrar de Yarn a Kubernetes. Esto se atribuye a varias razones, pero la más común es que Kubernetes proporciona una plataforma más resistente y flexible en materia de gestión de cargas de trabajo de Big Data.

Generalmente, es difícil llevar a cabo una migración de plataforma de la plataforma de procesamiento de datos de Apache Hadoop Yarn a cualquier otra. Hay muchos factores a tener en cuenta cuando se realiza un cambio de este tipo: la compatibilidad de los datos, la velocidad y el costo del procesamiento. Sin embargo, se lograría sin problemas y con éxito si el procedimiento está bien planificado y ejecutado.

hadoop yarn migration

Kubernetes es prácticamente un ajuste natural cuando se trata de cargas de trabajo de Big Data debido a su capacidad inherente para poder escalar horizontalmente. Sin embargo, con Hadoop Yarn, está limitado al número de nodos del clúster. Puede aumentar y reducir el número de nodos dentro de un clúster de Kubernetes bajo demanda.

También permite funciones que no están disponibles en Yarn, por ejemplo: autorreparación y escalado horizontal.

¿Es hora de hacer el cambio a Kubernetes?

A medida que el mundo del big data sigue evolucionando, también lo hacen las herramientas y tecnologías utilizadas para gestionarlo. Durante años, Apache Hadoop YARN ha sido el estándar de facto para la gestión de recursos en entornos de big data. Pero con el auge de las tecnologías de contenedorización y orquestación como Kubernetes, ¿es hora de hacer el cambio?

Kubernetes ha ido ganando popularidad como plataforma de orquestación de contenedores, y por una buena razón. Es flexible, escalable y relativamente fácil de usar. Si todavía usa la infraestructura tradicional basada en máquinas virtuales, ahora podría ser el momento de hacer el cambio a Kubernetes.

Si trabajas con contenedores, definitivamente deberías preocuparte por Kubernetes. Puede ayudarle a administrar e implementar sus contenedores de forma más eficaz, y es especialmente útil si trabaja con muchos contenedores o si va a implementar sus contenedores en una plataforma en la nube.

Kubernetes también es una excelente opción si está buscando una herramienta de orquestación respaldada por una importante empresa de tecnología. Google ha estado usando Kubernetes durante años para administrar sus propias aplicaciones en contenedores, y han invertido mucho tiempo y recursos en convertirlo en una gran herramienta.

No hay un ganador claro en el debate entre YARN y Kubernetes. La mejor solución para su organización dependerá de sus necesidades específicas y casos de uso. Si está buscando una solución de gestión de recursos más flexible y escalable, vale la pena considerar Kubernetes. Si necesita un mejor soporte para aplicaciones heredadas, YARN puede ser una mejor opción.

Sea cual sea la plataforma que elijas, Ilum puede ayudarte a sacarle el máximo partido. Nuestra plataforma está diseñada para funcionar tanto con YARN como con Kubernetes, y nuestro equipo de expertos puede ayudarte a elegir e implementar la solución adecuada para tu organización.

Clúster de Spark administrado

Un clúster de Spark administrado es una solución basada en la nube que facilita el aprovisionamiento y la administración de clústeres de Spark. Proporciona una interfaz basada en web para crear y administrar clústeres de Spark, así como un conjunto de API para automatizar las tareas de administración de clústeres. Los científicos de datos y los desarrolladores suelen usar los clústeres de Spark administrados que desean aprovisionar y administrar rápidamente clústeres de Spark sin tener que preocuparse por la infraestructura subyacente.

Ilum ofrece la capacidad de crear y administrar su propio clúster de Spark, que se puede ejecutar en cualquier entorno, incluida la nube, en las instalaciones o una combinación de ambos.

ilum ferret

Las ventajas de Apache Spark en Kubernetes

Ha habido cierto debate sobre si Apache Spark debería ejecutarse en Kubernetes.

Algunas personas argumentan que Kubernetes es demasiado complejo y que Spark debería continuar ejecutándose en su propio administrador de clústeres dedicado o permanecer en la nube. Otros argumentan que Kubernetes es el futuro del procesamiento de big data y que Spark debería adoptarlo.

Nosotros estamos en el último campo. Creemos que Kubernetes es el futuro del procesamiento de big data y que Apache Spark debería ejecutarse en Kubernetes.

La mayor ventaja de usar Spark en Kubernetes es que permite un escalado mucho más sencillo de las aplicaciones de Spark. Esto se debe a que Kubernetes está diseñado para manejar implementaciones de grandes cantidades de contenedores simultáneos. Por lo tanto, si tiene una aplicación de Spark que necesita procesar una gran cantidad de datos, simplemente puede implementar más contenedores en el clúster de Kubernetes para procesar los datos en paralelo. Esto es mucho más fácil que configurar un nuevo clúster de Spark en EMR cada vez que necesite escalar verticalmente su procesamiento. Puede ejecutarlo en cualquier plataforma en la nube (AWS, Google Cloud, Azure, etc.) o en las instalaciones. Esto significa que puede mover fácilmente sus aplicaciones de Spark de un entorno a otro sin tener que preocuparse por cambiar su administrador de clústeres.

Otra enorme ventaja es que permite flujos de trabajo más flexibles. Por ejemplo, si necesita procesar datos de varios orígenes, puede implementar fácilmente diferentes contenedores para cada origen y hacer que todos se procesen en paralelo. Esto es mucho más fácil que intentar administrar un flujo de trabajo complejo en un solo clúster de Spark.

Kubernetes tiene varias características de seguridad que lo convierten en una opción más atractiva para ejecutar aplicaciones de Spark. Por ejemplo, Kubernetes admite el control de acceso basado en roles, lo que le permite ajustar quién tiene acceso a su clúster de Spark.

Así que ahí lo tienes. Estas son solo algunas de las razones por las que creemos que Apache Spark debería ejecutarse en Kubernetes. Si no te convence, te animamos a que lo pruebes por ti mismo. Creemos que se sorprenderá de lo bien que funciona.

Recursos adicionales

Conclusión

Ilum simplifica el proceso de instalación y administración de Apache Spark en Kubernetes, lo que lo convierte en una opción ideal tanto para principiantes como para usuarios experimentados. Si sigues esta guía, tendrás un clúster de Spark funcional ejecutándose en Kubernetes en un abrir y cerrar de ojos.