Apache Spark es un tipo de tecnología que utiliza sistemas distribuidos. En este artículo explicamos qué es, cuáles son los conceptos clave a tener en cuenta y te orientamos a empezar a usarlo de forma sencilla.
¿Qué es Apache Spark?
Apache Spark es una tecnología que utiliza procesamiento distribuido, lo cual garantiza la posibilidad de escalar y de almacenar volúmenes casi infinitos de datos a una forma costo-efectiva.
Los sistemas distribuidos son un conjunto de computadoras o servidores que trabajan de forma coordinada como si fueran una sola. Podríamos pensarlos como si fueran una orquesta en la cual hay diferentes instrumentos que suenan de forma armónica como un todo.
En este artículo explicamos en detalle cómo funcionan los sistemas distribuidos.
Conceptos clave para entender cómo funciona Apache Spark
Antes de avanzar con el tema, es importante conocer cuáles son los conceptos clave para entender y poder trabajar con Apache Spark:
- Driver: Es el responsable de coordinar todo el trabajo. Es importante tener en cuenta que el driver no toca los datos, solo da las instrucciones y luego obtiene resultados.
- Ejecutores: Es el espacio de trabajo. Se trata de las máquinas virtuales en las que se ejecuta el código y se realizan todas las operaciones.
- Cluster: Es un conjunto de máquinas virtuales, se compone de un driver y de varios ejecutores. Técnicamente está formado por nodos.
- Nodos: Son máquinas físicas o virtuales que, en conjunto, dan forma al cluster. Dentro de los nodos se encuentran los slots que son la porción de cómputo de cada nodo ejecutor. Los slots son los encargados de ejecutar las tareas asignadas por el driver y representan la mínima unidad disponible para la paralelización. En un nodo puede haber varios slots, la cantidad la podemos configurar según la necesidad.
- Recursos: Siempre son compartidos (RAM, disco, network) por todos los slots.
- Paralelización: Es la manera de ejecutar las tareas. En lugar de hacerlo en secuencia, se ejecutan al mismo tiempo en diferentes nodos para acelerar el procesamiento.
¿Cómo funciona Apache Spark?
Apache Spark permite separar las tareas en múltiples partes. Vamos a explicarlo a partir de un ejemplo para que se entienda mejor. Supongamos que tenemos un salón de clase en el cual hay un docente y varios alumnos. El docente tiene una bolsa con varios paquetes de dulces confitados M&M de diferentes colores. Le entrega a cada alumno un paquete y les pide que separen los de color celeste.
Ahora llevemos esto al mundo de los datos. Partimos de un dataset (los M&M). El driver (el docente) define cómo se van a organizar los datos y los divide en particiones, una vez que las crea, asigna tareas a cada una (los alumnos). Recordemos que el driver no toca los datos.
Cómo funciona Apache Spark (driver, cluster, ejecutores).
En este punto aparece un nuevo concepto que es el de jobs en una aplicación de Apache Spark. El job es la instrucción que le damos, puede ser, por ejemplo, filtrar. La aplicación sería el código —en SQL, en Python, en Scala, en R, etc.— y el driver decide cuántos jobs necesita para la ejecución de esa aplicación.
Dentro de cada job habrá diferentes tareas. Los stages son las etapas en la que se divide un job. Cuando las instrucciones son complejas se dividen un mayor número de tares, estas se agrupan en etapas que forman parte de un job.
Las tareas complejas se dividen en bloques más pequeños para ir resolviéndolos, como explicamos en la siguiente imagen:
Ejecución en Apache Spark
En caso que necesitemos agregar/reducir más paralelismo, podemos agregar (o quitar) más ejecutores (máquinas).
Ejemplos de aplicaciones que usan Apache Spark
Todos los días usamos aplicaciones cuyos algoritmos corren sobre Apache Spark. Algunos de los ejemplos más comunes son:
- Los sistemas de recomendación de series o películas de Netflix.
- El Descubrimiento Semanal de Spotify.
- Cuando entramos a Airbnb y sugiere “mejores precios” en cierta locación que nos interese visitar.
¿Cómo empezar a usar Apache Spark?
Sabemos que empezar con Apache Spark puede ser complicado, sin embargo, hoy existen formas mucho más sencillas para hacerlo.
La manera más fácil — y la que recomendamos para comenzar— es abrir una cuenta gratuita en Databricks Community donde podrán acceder a todo el front-end de Databricks que facilitó muchos servicios que antes era complejos.
Una vez allí, seleccionan la máquina. Tengamos en cuenta que la versión gratuita tiene ciertas limitaciones, pero para practicar es más que suficiente.
Databricks es una plataforma como servicio (PaaS) y eso hace que sea mucho más fácil implementar Apache Spark, además corre en las tres principales nubes del mercado (Azure, AWS y GCP). Las formas de usarlo son muchas, todo dependerá del escenario al cual nos enfrentemos. Lo bueno es que en la nube hay opciones para todos los gustos.
¿Cómo aprender más sobre Apache Spark?
Recomendamos dos maneras, todo dependerá del perfil de la persona y de la profundidad técnica que necesite alcanzar:
- Usar la versión comunitaria de Databricks. Como explicamos más arriba, esto nos da la posibilidad de levantar un cluster chico para empezar a practicar. Desde esta perspectiva, aprenderemos a usar Apache Spark desde una mirada 100% de ingeniería de datos. Nos enfocamos en qué tenemos que hacer y cuáles son las formas de hacerlo, de esta manera, evitamos toda la complejidad asociada a la arquitectura.
- Apache Spark stand alone: Si les interesa más los aspectos técnicos, pueden descargar Apache Spark y hacer una instalación stand alone. Esto significa, que podemos instalar nuestra propia máquina y hacer que todo corra en nuestro entorno local. Tengamos en cuenta que esta opción es un poco más compleja.
Conclusión
Apache Spark no solo es una herramienta poderosa para el procesamiento distribuido de datos, sino que también es accesible para principiantes y expertos por igual.
Gracias a su capacidad de escalar y dividir tareas en paralelo, permite manejar grandes volúmenes de información de manera eficiente y costo-efectiva. Ya sea a través de plataformas intuitivas como Databricks o de instalaciones independientes más técnicas, Apache Spark ofrece flexibilidad para adaptarse a diferentes necesidades y niveles de experiencia.
En un mundo impulsado por datos, aprender a usar Apache Spark puede ser un paso clave para optimizar proyectos y abordar desafíos complejos en el ámbito de Data & AI.