Qué son Hadoop y Spark ?
Antes de explicar Qué son Hadoop y Spark, tendríamos que decir que las tecnologías del big data crecen de manera imparable. El inconveniente es que, con su crecimiento, el big data también se vuelve más complejo. En este contexto nacen las herramientas de manejo masivo de datos como por ejemplo Hadoop o Spark . Hadoop no es una herramienta aislada para el manejo del Big Data sino que en realidad constituye, un ecosistema capaz de soportar las exigencias del big data al ofrecer capacidades que solucionan sus problemas de escalabilidad. Por su parte Spark nace como mejora al paradigma de Map Reduce de Hadoop. Por este motivo no tiene tanto sentido comparar Spark vs Hadoop y por ello debemos comparar Spark con Hadoop Map Reduce ya que los dos realizan las mismas funciones.
Empecemos entonces a describir ambas herramientas y establecer algún tipo de comparaciones entre las mismas. También veremos otras herramientas relacionadas en este campo.
¿Qué es Hadoop de Apache?
Hadoop es un proyecto de código abierto desarrollado por la Apache Software Foundation. Se trata de un framework de software que permite programar aplicaciones distribuidas, es decir, aplicaciones capaces de trabajar con enormes cantidades de nodos en red y de datos.
Debemos entender que Apache Hadoop es un framework de software que aporta la capacidad de ejecutar aplicaciones distribuidas y escalables, generalmente para el sector del Big Data. Así, permite a las aplicaciones hacer uso de miles de nodos de procesamiento y almacenamiento y petabytes de datos.
Hadoop es una de las tecnologías más populares en el ámbito de aplicaciones Big Data. Es usado en multitud de empresas como plataforma central en sus Data Lakes (Lagos de datos), sobre la que se construyen los casos de uso alrededor de la explotación y el almacenamiento de los datos.
Para profundizar en lo que es Hadoop de Apache y cómo funciona, este se basa en distribuir los datos y paralelizar el procesamiento de los mismos, de modo que cada nodo de una red de máquinas se encargue de procesar una parte de la totalidad de los datos durante el procesamiento del big data. A este método se le conoce como procesamiento distribuido o computación distribuida, que es, básicamente, distribuir las cargas de trabajo entre varios nodos de una misma red computacional. De aquí que Hadoop sea tan importante en la implementación del big data.
¿Para qué sirve Hadoop?
El big data se caracteriza por el procesamiento de grandes volúmenes de datos, que se generan a gran velocidad y que provienen de fuentes muy variadas. Por ejemplo, con un sistema de big data en las empresas, los gerentes pueden:
- Entender mejor a sus clientes. Esto es posible al recoger y procesar grandes cantidades de datos provenientes de redes sociales, páginas web, aplicaciones móviles, entre otras fuentes. Al analizar dichos datos, se puede detectar de manera detallada los gustos, deseos, necesidades y tendencias de miles o millones de usuarios. A partir de dicha detección, es posible entonces predecir comportamientos futuros en el mercado, diseñar mejores estrategias de marketing, desarrollar mejores productos o servicios, etc.
- Optimizar los procesos de negocio. Al obtener datos de múltiples fuentes (sistemas empresariales, proveedores, clientes, departamentos, etc.), una empresa de logística puede, por ejemplo, replantear sus procesos en la cadena de suministro para ahorrar costos, adaptar los niveles de stock en función de la previsión de la demanda para evitar el almacenamiento excesivo, mejorar las rutas de distribución para aprovechar al máximo cada unidad de transporte, diseñar líneas de producción mucho más eficientes, entre otros.
- Mejorar la productividad del personal y de las maquinarias. A través de sensores y otros dispositivos electrónicos, el sistema de big data logra extraer datos tanto de todos los empleados de la empresa como de las maquinarias que están instaladas. Al analizar dichos datos, los gerentes logran identificar patrones de comportamiento o de tareas que afectan la productividad. Por tanto, con esta información en mano, se pueden crear estrategias para aumentar los niveles de rendimiento del personal y de las máquinas, ya sea haciendo que los procesos se puedan ejecutar en un menor tiempo, redistribuyendo de manera inteligente al personal en planta para acortar su recorrido de un punto a otro, incluso planteando jornadas de trabajo mucho más coordinadas y eficientes, entre otros.
En este entorno tan exigente en cuanto a volumen, velocidad y variedad de datos, Hadoop se encarga de aportarle al sistema mayor rapidez, escalabilidad y tolerancia a fallos, para que la implementación del big data pueda funcionar de manera adecuada en las empresas.
Para lograrlo, Hadoop distribuye las cargas de trabajo con el fin de aportar mayor rapidez, permite agregar nuevos nodos al clúster de máquinas cada vez que el sistema necesita más potencia (escalabilidad), y garantiza la tolerancia a fallos debido a la alta disponibilidad y a la redundancia de los datos, los cuales suelen tener replicación 3 en el HDFS (Hadoop Distributed File System). Es decir, cada bloque de datos se almacena en 3 máquinas distintas al mismo tiempo.
Hadoop es más que una herramienta es un ecosistema
El ecosistema de lo que es Hadoop está compuesto por los siguientes módulos:
- Hadoop Common: es un paquete de utilidades comunes entre los otros módulos. Este paquete contiene los archivos y los scripts necesarios para ejecutar Hadoop, así como también dispone del código fuente y de toda la documentación del proyecto Apache Hadoop.
- Hadoop Distributed File System: es el sistema de archivos distribuido que proporciona acceso de alto rendimiento a los datos de la aplicación. Este sistema se encuentra instalado en cada una de las máquinas, y es donde se almacenan los datos distribuidos. Ees el componente principal del ecosistema Hadoop. Esta pieza hace posible almacenar data sets masivos con tipos de datos estructurados, semi-estructurados y no estructurados. Proporciona la división de los datos en bloques que necesita MapReduce para ejecutar sus fases map y reduce. Está optimizado para almacenar grandes cantidades de datos y mantener varias copias en el clúster para garantizar una alta disponibilidad y tolerancia a fallos.
- Hadoop YARN (Yet Another Resource Negotiator): comenzó siendo un gestor de recursos que precisamente controlaba todos los recursos distribuidos en todas las máquinas de la red, pero ahora es considerado un sistema operativo distribuido para aplicaciones de big data. YARN es el framework que permite soportar varios motores de ejecución incluyendo MapReduce, y que proporciona un planificador agnóstico a los trabajos que se encuentran en ejecución en el clúster. También se encarga de proporcionar los recursos computacionales necesarios para los trabajos como memoria o cpu.
- Hadoop Ozone: es el almacén de objetos de Hadoop que se caracteriza por ser escalable, redundante y distribuido.
- Hadoop MapReduce: es un sistema basado en Hadoop YARN para el procesamiento paralelo y distribuido de grandes data sets (conjunto de datos).
MapReduce de Hadoop
MapReduce es la columna vertebral de Apache Hadoop. Este consiste en una técnica de procesamiento de datos que aplica dos tipos de funciones sobre los mismos: función map y función reduce.
La función map toma los archivos almacenados en el HDFS, y crea varios conjuntos de datos a partir de ellos. Después, la función reduce procesa esos conjuntos de datos y crear a partir de ellos conjuntos todavía más pequeños, los cuales se vuelven a almacenar en el HDFS. La secuencia de ambas funciones es la que facilita el procesamiento paralelo en lo que es Hadoop, ya que permite que el código se pueda ejecutar en múltiples nodos.
¿Qué es Spark ?
Apache Spark está especialmente diseñado para su implementación en big data y machine learning. Pues su potencia de procesamiento agiliza la detección de patrones en los datos, la clasificación organizada de la información, la ejecución de cómputo intensivo sobre los datos y el procesamiento paralelo en clústers.
Al igual que Hadoop, Spark es un proyecto de código abierto de la fundación Apache que nace en 2012 como mejora al paradigma de Map Reduce de Hadoop. Al ser código abierto puede ser modificado para crear versiones personalizadas dirigidas a problemas específicos o industriales. Tanto los desarrolladores individuales como las empresas crean versiones personalizadas que perfeccionan y actualizan constantemente el core añadiendo más funcionalidades y mejoras de rendimiento. De hecho, Spark fue el proyecto más activo de Apache el año pasado. También fue la más activa de todas las aplicaciones de código abierto de Big Data, con más de 500 colaboradores de más de 200 organizaciones.
Desde el punto de vista técnico podemos decir que tiene abstracciones de programación de alto nivel , y con la enorme ventaja de que n os permite trabajar con lenguaje SQL. Entre sus APIs cuenta con dos de procesado de datos en tiempo real (Spark Streaming y Spark Structured Streaming), una para aplicar Machine Learning distribuido (Spark MLlib) y otro para trabajar con grafos (Spark GraphX).
Aunque Spark cuenta también con su propio gestor de recursos (Standalone), este no goza de tanta madurez como Hadoop Yarn por lo que el principal módulo que destaca de Spark es: su paradigma procesamiento distribuido.
Hay que mencionar ademas que es un motor ultrarrápido para el almacenamiento, procesamiento y análisis de grandes volúmenes de datos. La herramienta Apache Spark es uno de sus proyectos más activos.
En resumen podemos decir que: Spark es visto por los expertos como un producto más avanzado que Hadoop, por su diseño de trabajo “In-memory”. Esto significa que transfiere los datos desde los discos duros a memoria principal – hasta 100 veces más rápido en algunas operaciones-. Estas transferencias se realiza partiendo estos datos en diversos “Chunks»
Spark es muy popular y usado por grandes empresas para el almacenamiento y análisis de datos al nivel “multi-petabyte”, esto ha sido posible gracias a su velocidad. En 2014, Spark estableció un récord mundial al completar un benchmark que incluía la selección de 100 terabytes de datos en 23 minutos – el récord mundial anterior era de 71 minutos conseguido por Hadoop.
Spark utiliza el cluster computing para su potencia de cálculo (analítica) y su almacenamiento. Esto significa que puede utilizar los recursos de muchos nodos (oredenadores) unidos entre sí para sus análisis. Es una solución escalable que significa que si se necesita más potencia de cálculo, sólo tiene que introducir más nodos en el sistema. Con el almacenamiento distribuido, los enormes conjuntos de datos recogidos para el análisis de grandes volúmenes de datos pueden ser almacenados en múltiples discos duros individuales más pequeños. Esto acelera las operaciones de lectura y/o escritura, debido al «head», que lee la información de los discos con menos distancia física para desplazarse sobre la superficie del disco. Al igual que con la potencia de procesamiento, se puede añadir más capacidad de almacenamiento cuando sea necesario, el hardware básico y comúnmente disponible (para cualquier disco duro de un ordenador estándar) supone menos costes de infraestructuras.
A diferencia de Hadoop, Spark no viene con su propio sistema de archivos, en lugar de eso, se puede integrar con muchos sistemas de archivos incluyendo de Hadoop HDFS, MongoDB y el sistema S3 de Amazon.
Otro elemento de este framework es el Spark Streaming, que permite en desarrollo de aplicaciones para el análisis de datos en streaming, datos en tiempo real – como el análisis automático de videos o datos de las redes sociales – “sobre la marcha” o en tiempo real.
En las industrias que cambian rápidamente como sucede en la industria del marketing, el análisis en tiempo real tiene enormes ventajas. Por ejemplo, los anuncios pueden basarse en función del comportamiento de un usuario en un momento determinado, en lugar de ver el comportamiento histórico, aumentando la posibilidad de provocar el impulso de compra.
Esta es una breve introducción a Apache Spark – sobre qué es, cómo funciona y por qué mucha gente piensa que es el futuro-.
Fuente: Bernard Marr at «What Is Spark – An Easy Explanation For Absolutely Anyone«.
Los componentes de Apache Spark
Existen 4 componentes que integran y potencian lo que es Spark. Ellos son:
- Spark SQL: permite acceder a los datos de manera estructurada. También facilita la integración de Spark con Hive, ODBC, JDBC y herramientas de business intelligence.
- Spark Streaming: brinda soporte para el procesamiento de datos en tiempo real. Esto mediante un sistema de empaquetamiento de pequeños lotes.
- MLlib – Machine Learning Library: ofrece una biblioteca de algoritmos muy potentes de machine learning.
- GraphX: proporciona una API de procesamiento gráfico para computación paralela de grafos.
Ventajas de Spark
Una de las mayores ventajas de Apache Spark es que su velocidad de procesamiento es 100 veces mayor que Apache Hadoop si se ejecuta en memoria y 10 veces mayor si se ejecuta en disco.
Sin embargo, también ofrece decenas de otras ventajas sumamente importantes. Por ello es necesario conocer a profundidad qué es Spark y cuáles son los beneficios que aporta. Algunos de ellos son:
- Permite su adaptación a distintas necesidades gracias a que es 100% open source.
- Simplifica el proceso de desarrollo de soluciones inteligentes.
- Mejora el desempeño de aplicaciones dependientes de datos.
- Unifica algoritmos para que trabajen conjuntamente en diversas tareas.
- Integra dentro de sí el modelado analítico de datos.
- Otorga escalabilidad en su potencia al introducir más procesadores en el sistema.
- Reduce los costes al poder utilizarse en hardware estándar de uso común.
- Promueve workflows basados en Grafos Acíclicos Dirigidos que aceleran el procesamiento.
- Dispone de una API para Java, Phyton y Scala; también APIs para transformar y manipular datos semiestructurados.
- Facilita la integración con sistemas de archivos como HDFS de Hadoop, Cassandra, HBase, MongoDB y el S3 de AWS.
- Ofrece bibliotecas de alto nivel para mejorar la productividad de los desarrolladores.
- Posee tolerancia a fallos implícita.
- Combina SQL, streaming y análisis de gran complejidad.
Otras tecnologías similares y relacionadas
Los proyectos open source más populares del ecosistema formado alrededor de Apache Hadoop y Spark son:
- Ambari: Herramienta para gestionar y provisionar clústers de Apache Hadoop y tecnologías relacionadas. Proporciona una interfaz web sencilla y amigable para visualizar y monitorizar el estado del sistema y de todos sus componentes, así como establecer alertas y visualizar estadísticas.
- Oozie: Permite ejecutar y planificar en el tiempo trabajos y tareas en Hadoop mediante configuraciones XML.
- Pig: Proporciona el lenguaje de programación Pig Latin, con sintaxis parecida a SQL. Transforma los programas en sentencias MapReduce que ejecutan en un clúster Hadoop.
- Storm: Componente encargado de procesar flujos de datos en tiempo real. Su uso suele ir acompañado de Apache Kafka.
- Tez: Framework de programación de flujos de datos. Es la evolución de MapReduce que ejecuta sobre Yarn optimizando el código para alcanzar mejoras de hasta 10 veces en el rendimiento. Muchas tecnologías están adoptando Tez como motor de ejecución principal.
- Zookeeper: Servicio de coordinación para aplicaciones distribuidas, tolerante a fallos. Generalmente, se despliega en 3 nodos.
Consulta de datos
- Hive: Proporciona la interfaz SQL a Hadoop necesaria para convertirse en un Data Warehouse. Transforma las consultas SQL en trabajos MapReduce sobre datos estructurados. Hive no es apropiado para realizar consultas de baja latencia.
- HBase: Base de datos NoSQL distribuida y escalable para datos estructurados sobre HDFS con formato de columnas y operaciones CRUD (Create, Read, Update, Delete).
- Hue: Permite escribir consultas SQL y conectar con los catálogos y con las bases de datos del clúster para analizar datos de forma interactiva.
- Impala: Base de datos SQL sobre Hadoop. Proporciona la capacidad de realizar consultas concurrentes y de baja latencia para analítica y Business Intelligence (BI).
Captura o Ingesta de datos
Además de estas tecnologías, debemos comprender el conjunto de tecnologías que se usan para introducir datos en un clúster Hadoop. Este proceso se llama ingesta de datos y generalmente se lleva a cabo por una combinación de los siguientes componentes:
-
Flume: Actúa como buffer para introducir datos en el lago.
- Sqoop: Herramienta especializada para ingestas de datos con fuente en bases de datos externas y con destino HDFS.
- Kafka: Sistema muy usado con un modelo pub-sub que divide los datos en temas con bajas latencias. Los consumidores pueden suscribirse para recibir los mensajes.
Servicios de Big Data en la nube (Cloud Big Data)
No debemos olvidar que los proveedores cloud como AWS o Azure proporcionan servicios gestionados basados en Apache Hadoop. Por ejemplo, con el servicio HDInsight de Microsoft Azure, podemos desplegar y escalar clústers de varios tipos predefinidos de una manera sencilla y transparente. Con EMR, en AWS, podemos desplegar el ecosistema de Hadoop. Estos servicios tienen muchas ventajas asociadas al ahorro de costes de infraestructura y de gestión y es importante analizarlos.
Además de su uso como servicio, podemos considerar alternativas basadas en la nube como Databricks. Este servicio proporciona Spark como servicio, pudiendo desplegar clústers y cargas de trabajo bajo demanda y con escalabilidad automática. Tenemos que tener en cuenta que este tipo de soluciones resuelven el problema del procesamiento de nuestros datos pero no proporcionan el sistema de almacenamiento como HDFS.
Si el objetivo es obtener una plataforma del dato como Data Warehouse totalmente gestionado se pueden evaluar otras soluciones como Snowflake. Esto permite abstraer aún más el despliegue al ser software como servicio. Hadoop no se trata de una base de datos NoSQL y tiene unos costes asociados a su complejidad.
¿Cómo integrar Hadoop en tu empresa?
Si deseas integrar Hadoop en tu empresa, ten en cuenta las siguientes consideraciones, pasos y mejores prácticas
- Define el uso: Usa metas pequeñas y alcanzables que ayuden a procesar los datos. Comienza por definir las formas de acceder a los datos que necesitan los usuarios.
- Calidad del dato: Debemos monitorizar Hadoop como cualquier otra herramienta más en la organización.
- Uso de frameworks existentes: No es necesario inventar nuevos métodos, usa frameworks que ya existen en tu organización para supervisar el acceso a los datos como Spring. De esta forma, los desarrolladores podrán centrarse en la lógica de negocio y en implementar nuevas estrategias.
- Linaje de datos: Debemos realizar un seguimiento del linaje de los datos a través de sus metadatos. Existen herramientas que permiten realizar este seguimiento desde el origen hasta el destino.
- Modelado de datos: Modela los datos de acuerdo a los patrones de procesamiento y de acceso.
- Seguridad: Implementa seguridad de acceso basada en Active Directory y LDAP. Refuerza la seguridad del clúster con servicios como Sentry.
Comparativa de lo que es Hadoop y Spark
Al igual que Hadoop, Spark es un proyecto de código abierto desarrollado por la Apache Software Foundation. En este contexto, Apache Spark surge como una evolución de lo que es Hadoop para optimizar los procesos de big data.
La principal característica, y diferencia con Hadoop, es que Spark no se basa en MapReduce para el procesamiento de datos, ya que este último resulta algo lento e ineficiente cuando se necesita un procesamiento en tiempo real.
Mientras que MapReduce ejecuta las tareas en modo lote y además utiliza el disco para los resultados intermedios, Spark en cambio ejecuta las tareas en microlotes y utiliza la memoria (no el disco). Esto hace que el procesamiento de datos sea mucho más rápido. De hecho, la velocidad de procesamiento de Spark es 100 veces más rápida en comparación a Hadoop cuando se ejecuta en memoria y 10 veces más rápida cuando se ejecuta en disco.
Sin embargo, es importante destacar que Apache Spark debe apoyarse en el sistema de ficheros distribuido de Hadoop (HDFS), ya que no cuenta con su propio sistema. Además, su potencia es mayor cuando también utiliza los otros módulos de la arquitectura de Hadoop. , por ello como decíamos al inicio no tiene mucho sentido hacer una comparación entre Hadoop y Spark ya que son las funciones de Hadoop mapreduce las que podrían ser comparables con Spark
Conclusiones:
En conclusión, para obtener un rendimiento óptimo al trabajar con big data, es recomendable hacer un uso combinado de lo que es Hadoop y lo que es Spark, de manera, es posible aprovechar el poder de Hadoop y la eficiencia de Spark.
Apache Spark parece sin duda el candidato perfecto si queremos emplear un framework para programar Big Data, sin embargo, no cuenta con su propio sistema de ficheros distribuido y es donde se apoya en el sistema de Hadoop, HDFS.
También permite trabajar con su gestor de recursos Hadoop Yarn y con muchos del resto de módulos con los que cuenta Hadoop.
Es por esto que como conclusión podemos decir que en la actualidad emplear la simbiosis entre Apache Spark + Apache Hadoop es la mejor opción para trabajar con Big Data, haciendo uso del músculo de Hadoop (Hadoop YARN, HDFS…) y el cerebro de Spark.
Fuentes: ESIC, Intelligent.es, aprenderelbigdata.com, juanbarrios.com