Un clúster de computación distribuida consiste en una red formada por varias computadoras que funcionan como un solo sistema.
Estos computadores pueden tener múltiples configuraciones, es decir, puede funcionar con varias estaciones de trabajo, computadoras personales, laptops, etc. A la final su objetivo es que la red funcione como una sola máquina.
Es así que los sistemas distribuidos ofrecen varios beneficios, tales como:
Escalabilidad: El sistema puede ser fácilmente expandido conforme añadimos máquinas.
Alta disponibilidad: Si un nodo falla, los servicios que se encuentran corriendo en este nodo (computador) puede ser tomados por otros nodos.
Las máquinas que forman parte de la red no necesitan ser superordenadores sino que puede ser muchas máquinas pequeñas.
Los sistemas de computación distribuidos además, pueden correr en hardware ofrecido por varios proveedores (incluyendo aquellos con soluciones en nube). El software en estos sistemas se puede organizar en dos partes: clientes y servidores. Los clientes son programas que usan servicios que proveen los servidores. Cuando un cliente hace la solicitud de un servicio, los proveedores lo ejecutan, tomando en cuenta que estos servicios requiere manejo de recursos.
Con estos detalle en mente, usualmente existen tres tipos de clúster:
Cada uno se usa acorde a los recursos que se necesiten para ejecutar una tarea.
Apache Spark es un motor unificado de analítica para big data y machine learning y fue originalmente desarrollado en la UC Berkeley en 2009. Este funciona sobre un clúster de computación distribuida. A continuación podemos ver cómo se estructura su ecosistema.
Apache Spark se puede considerar entonces un sistema de computación en clúster de propósito general y orientado a la velocidad. Proporciona APIs en Java, Scala, Python y R. Además, proporciona un motor optimizado que soporta la ejecución de grafos en general. También soporta un conjunto extenso y rico de herramientas de alto nivel entre las que se incluyen Spark SQL (para el procesamiento de datos estructurados basada en SQL), MLlib para implementar machine learning, GraphX para el procesamiento de grafos y Spark Streaming.