Spark vs Hadoop: ¿Cuál es el mejor marco de Big Data?



Esta publicación de blog habla sobre apache spark vs hadoop. Le dará una idea sobre cuál es el marco de Big Data adecuado para elegir en diferentes escenarios.

Comenzaré este blog de Apache Spark vs Hadoop presentando primero Hadoop y Spark para establecer el contexto correcto para ambos marcos. Luego, avanzando, compararemos ambos marcos de Big Data en diferentes parámetros para analizar sus fortalezas y debilidades.Pero, sea cual sea el resultado de nuestra comparación, debe saber que tanto Spark como Hadoop son componentes cruciales del .

Apache Spark vs Hadoop: Introducción a Hadoop

Hadoop es un marco que le permite almacenar primero Big Data en un entorno distribuido para que pueda procesarlo en paralelo. Básicamente, hay dos componentes en Hadoop:





HDFS

HDFS crea una abstracción de recursos, déjeme simplificarlo para usted. Similar a la virtualización, puede ver HDFS lógicamente como una sola unidad para almacenar Big Data, pero en realidad está almacenando sus datos en múltiples nodos de manera distribuida. Aquí tienes la arquitectura maestro-esclavo. En HDFS, Namenode es un nodo maestro y Datanodes son esclavos.

NameNode

Es el demonio maestro que mantiene y administra los DataNodes (nodos esclavos). Registra los metadatos de todos los archivos almacenados en el clúster, p. Ej. ubicación de los bloques almacenados, tamaño de los archivos, permisos, jerarquía, etc. Registra todos y cada uno de los cambios que se producen en los metadatos del sistema de archivos.



Por ejemplo, si se elimina un archivo en HDFS, NameNode lo registrará inmediatamente en el EditLog. Recibe regularmente un Heartbeat y un informe de bloque de todos los DataNodes en el clúster para garantizar que los DataNodes estén activos. Mantiene un registro de todos los bloques en HDFS y en qué nodos se almacenan estos bloques.

DataNode

Estos son demonios esclavos que se ejecutan en cada máquina esclava. Los datos reales se almacenan en DataNodes. Son responsables de atender las solicitudes de lectura y escritura de los clientes. También son responsables de crear bloques, eliminar bloques y replicar los mismos en base a las decisiones tomadas por el NameNode.

HDFS - Apache Spark frente a Hadoop - EdurekaHILO

YARN realiza todas sus actividades de procesamiento mediante la asignación de recursos y la programación de tareas. Tiene dos demonios principales, es decir Administrador de recursos y NodeManager .



Administrador de recursos

Es un componente de nivel de clúster (uno para cada clúster) y se ejecuta en la máquina maestra. Gestiona recursos y programa aplicaciones que se ejecutan sobre YARN.

NodeManager

Es un componente de nivel de nodo (uno en cada nodo) y se ejecuta en cada máquina esclava. Es responsable de administrar contenedores y monitorear la utilización de recursos en cada contenedor. También realiza un seguimiento del estado del nodo y la gestión de registros. Se comunica continuamente con ResourceManager para mantenerse actualizado. Por lo tanto, puede realizar un procesamiento paralelo en HDFS utilizando MapReduce.

Para obtener más información sobre Hadoop, puede consultar este Blog. Ahora que estamos listos con la introducción de Hadoop, pasemos a la introducción de Spark.

Apache Spark vs Hadoop: Introducción a Apache Spark

Apache Spark es un marco para el análisis de datos en tiempo real en un entorno informático distribuido. Ejecuta cálculos en memoria para aumentar la velocidad del procesamiento de datos. Es más rápido para procesar datos a gran escala, ya que aprovecha los cálculos en memoria y otras optimizaciones. Por tanto, requiere una gran potencia de procesamiento.

Resilient Distributed Dataset (RDD) es una estructura de datos fundamental de Spark. Es una colección distribuida inmutable de objetos. Cada conjunto de datos en RDD se divide en particiones lógicas, que se pueden calcular en diferentes nodos del clúster. Los RDD pueden contener cualquier tipo de objetos Python, Java o Scala, incluidas las clases definidas por el usuario. Los componentes Spark lo hacen rápido y confiable. Apache Spark tiene los siguientes componentes:

cómo inicializar un objeto en Python

  1. Spark Core - Spark Core es el motor base para el procesamiento de datos distribuidos y paralelos a gran escala. Además, las bibliotecas adicionales que se construyen sobre el núcleo permiten diversas cargas de trabajo para transmisión, SQL y aprendizaje automático. Es responsable de la gestión de la memoria y la recuperación de fallos, la programación, la distribución y la supervisión de trabajos en un clúster y la interacción con los sistemas de almacenamiento.
  2. Spark Streaming - Spark Streaming es el componente de Spark que se utiliza para procesar datos de transmisión en tiempo real. Por lo tanto, es una adición útil a la API central de Spark. Permite el procesamiento de flujos de datos en vivo de alto rendimiento y tolerancia a fallas.
  3. Spark SQL : Spark SQL es un nuevo módulo de Spark que integra el procesamiento relacional con la API de programación funcional de Spark. Admite la consulta de datos a través de SQL o mediante el lenguaje de consulta de Hive. Para aquellos de ustedes familiarizados con RDBMS, Spark SQL será una transición fácil de sus herramientas anteriores donde puede ampliar los límites del procesamiento de datos relacionales tradicionales.
  4. GraphX : GraphX ​​es la API de Spark para gráficos y cálculo paralelo de gráficos. Por lo tanto, amplía Spark RDD con un gráfico de propiedades distribuidas resilientes. A alto nivel, GraphX ​​amplía la abstracción de Spark RDD al introducir el Gráfico de propiedades distribuidas resilientes: un gráfico múltiple dirigido con propiedades adjuntas a cada vértice y borde.
  5. MLlib (Aprendizaje automático): MLlib significa Biblioteca de aprendizaje automático. Spark MLlib se usa para realizar aprendizaje automático en Apache Spark.

Como puede ver, Spark viene repleto de bibliotecas de alto nivel, incluido el soporte para R, SQL, Python, Scala, Java, etc. Estas bibliotecas estándar aumentan las integraciones perfectas en el flujo de trabajo complejo. Sobre esto, también permite que varios conjuntos de servicios se integren con él como MLlib, GraphX, SQL + Data Frames, servicios de transmisión, etc. para aumentar sus capacidades.

Para obtener más información sobre Apache Spark, puede consultar este Blog. Ahora el terreno está listo para Apache Spark vs Hadoop. Avancemos y comparemos Apache Spark con Hadoop en diferentes parámetros para comprender sus fortalezas.

Apache Spark vs Hadoop: parámetros para comparar

Actuación

Spark es rápido porque tiene procesamiento en memoria. También puede usar el disco para datos que no caben en la memoria. El procesamiento en memoria de Spark ofrece análisis casi en tiempo real. Esto hace que Spark sea adecuado para sistemas de procesamiento de tarjetas de crédito, aprendizaje automático, análisis de seguridad y sensores de Internet de las cosas.

Hadoop se configuró originalmente para recopilar datos continuamente de múltiples fuentes sin preocuparse por el tipo de datos y almacenarlos en un entorno distribuido. MapReduce utiliza procesamiento por lotes. MapReduce nunca se creó para el procesamiento en tiempo real, la idea principal detrás de YARN es el procesamiento paralelo sobre un conjunto de datos distribuidos.

El problema de comparar los dos es que realizan el procesamiento de manera diferente.

Facilidad de uso

Spark viene con API fáciles de usar para Scala, Java, Python y Spark SQL. Spark SQL es muy similar a SQL, por lo que resulta más fácil para los desarrolladores de SQL aprenderlo. Spark también proporciona un shell interactivo para que los desarrolladores consulten y realicen otras acciones, y tengan comentarios inmediatos.

Puede ingerir datos en Hadoop fácilmente mediante el uso de shell o integrándolos con múltiples herramientas como Sqoop, Flume, etc. YARN es solo un marco de procesamiento y se puede integrar con múltiples herramientas como Hive y Pig. HIVE es un componente de almacenamiento de datos que realiza la lectura, escritura y gestión de grandes conjuntos de datos en un entorno distribuido utilizando una interfaz similar a SQL. Puedes pasar por esto Ecosistema de Hadoop blog para conocer las diversas herramientas que se pueden integrar con Hadoop.

Costos

Hadoop y Spark son proyectos de código abierto de Apache, por lo que el software no tiene ningún costo. El costo solo está asociado con la infraestructura. Ambos productos están diseñados de tal manera que pueden ejecutarse en hardware básico con un TCO bajo.

Ahora puede que se esté preguntando en qué se diferencian. El almacenamiento y procesamiento en Hadoop está basado en disco y Hadoop usa cantidades estándar de memoria. Entonces, con Hadoop necesitamos mucho espacio en disco, así como discos más rápidos. Hadoop también requiere varios sistemas para distribuir la E / S del disco.

Debido al procesamiento de la memoria de Apache Spark, requiere mucha memoria, pero puede manejar una velocidad y una cantidad de disco estándar. Dado que el espacio en disco es un bien relativamente económico y Spark no usa E / S de disco para procesar, en su lugar requiere grandes cantidades de RAM para ejecutar todo lo que hay en la memoria. Por lo tanto, el sistema Spark incurre en más costos.

ejemplos de clases y objetos de Python

Pero sí, una cosa importante a tener en cuenta es que la tecnología de Spark reduce la cantidad de sistemas necesarios. Necesita muchos menos sistemas que cuestan más. Entonces, habrá un punto en el que Spark reducirá los costos por unidad de cálculo incluso con el requisito de RAM adicional.

Procesamiento de datos

Hay dos tipos de procesamiento de datos: procesamiento por lotes y procesamiento de flujo.

Procesamiento por lotes vs procesamiento de flujo

Procesamiento por lotes : El procesamiento por lotes ha sido crucial para el mundo del big data. En términos más simples, el procesamiento por lotes funciona con grandes volúmenes de datos recopilados durante un período. En el procesamiento por lotes, los datos se recopilan primero y luego los resultados procesados ​​se producen en una etapa posterior.

El procesamiento por lotes es una forma eficiente de procesar grandes conjuntos de datos estáticos. Generalmente, realizamos procesamiento por lotes para conjuntos de datos archivados. Por ejemplo, calcular el ingreso promedio de un país o evaluar el cambio en el comercio electrónico en la última década.

Procesamiento de flujo : El procesamiento de transmisiones es la tendencia actual en el mundo del big data. La necesidad del momento es la velocidad y la información en tiempo real, que es lo que hace el procesamiento de vapor. El procesamiento por lotes no permite que las empresas reaccionen rápidamente a las cambiantes necesidades comerciales en tiempo real; el procesamiento de secuencias ha experimentado un rápido crecimiento en la demanda.

Volviendo a Apache Spark vs Hadoop, YARN es básicamente un marco de procesamiento por lotes. Cuando enviamos un trabajo a YARN, lee los datos del clúster, realiza la operación y escribe los resultados en el clúster. Luego, vuelve a leer los datos actualizados, realiza la siguiente operación y escribe los resultados en el clúster y así sucesivamente.

Spark realiza operaciones similares, pero usa procesamiento en memoria y optimiza los pasos. GraphX ​​permite a los usuarios ver los mismos datos como gráficos y como colecciones. Los usuarios también pueden transformar y unir gráficos con Resilient Distributed Datasets (RDD).

Tolerancia a fallos

Hadoop y Spark proporcionan tolerancia a fallas, pero ambos tienen un enfoque diferente. Tanto para HDFS como para YARN, los demonios maestros (es decir, NameNode y ResourceManager respectivamente) verifican el latido de los demonios esclavos (es decir, DataNode y NodeManager respectivamente). Si falla algún demonio esclavo, los demonios maestros reprograman todas las operaciones pendientes y en curso a otro esclavo. Este método es efectivo, pero también puede aumentar significativamente los tiempos de finalización para operaciones con falla única. Como Hadoop utiliza hardware básico, otra forma en la que HDFS garantiza la tolerancia a fallas es replicando los datos.

Como comentamos anteriormente, los RDD son componentes básicos de Apache Spark. Los RDD brindan tolerancia a fallas a Spark. Pueden hacer referencia a cualquier conjunto de datos presente en un sistema de almacenamiento externo como HDFS, HBase, sistema de archivos compartido. Pueden funcionar en paralelo.

que ide usar para java

Los RDD pueden conservar un conjunto de datos en la memoria en todas las operaciones, lo que hace que las acciones futuras sean 10 veces más rápidas. Si se pierde un RDD, se volverá a calcular automáticamente utilizando las transformaciones originales. Así es como Spark proporciona tolerancia a errores.

Seguridad

Hadoop admite Kerberos para la autenticación, pero es difícil de manejar. Sin embargo, también es compatible con proveedores externos como LDAP (Protocolo ligero de acceso a directorios) para la autenticación. También ofrecen cifrado. HDFS admite permisos de archivos tradicionales, así como listas de control de acceso (ACL). Hadoop proporciona autorización de nivel de servicio, que garantiza que los clientes tengan los permisos adecuados para el envío de trabajos.

Spark actualmente admite la autenticación a través de un secreto compartido. Spark puede integrarse con HDFS y puede usar HDFS ACL y permisos de nivel de archivo. Spark también se puede ejecutar en YARN aprovechando la capacidad de Kerberos.

Casos de uso donde Hadoop se adapta mejor:

  • Análisis de datos de archivo. YARN permite el procesamiento paralelo de grandes cantidades de datos. Partes de los datos se procesan en paralelo y por separado en diferentes DataNodes y recopila el resultado de cada NodeManager.
  • Si no se requieren resultados instantáneos. Hadoop MapReduce es una solución buena y económica para el procesamiento por lotes.

Casos de uso donde Spark se adapta mejor:

Análisis de Big Data en tiempo real:

El análisis de datos en tiempo real significa procesar los datos generados por los flujos de eventos en tiempo real que llegan a una velocidad de millones de eventos por segundo, datos de Twitter, por ejemplo. La fuerza de Spark radica en su capacidad para admitir la transmisión de datos junto con el procesamiento distribuido. Esta es una combinación útil que ofrece un procesamiento de datos casi en tiempo real. MapReduce no tiene esta ventaja, ya que fue diseñado para realizar un procesamiento distribuido por lotes en grandes cantidades de datos. Los datos en tiempo real aún se pueden procesar en MapReduce, pero su velocidad no se acerca a la de Spark.

Spark afirma procesar datos 100 veces más rápido que MapReduce, mientras que 10 veces más rápido con los discos.

Procesamiento de gráficos:

La mayoría de los algoritmos de procesamiento de gráficos, como el rango de página, realizan múltiples iteraciones sobre los mismos datos y esto requiere un mecanismo de paso de mensajes. Necesitamos programar MapReduce explícitamente para manejar tales iteraciones múltiples sobre los mismos datos. Básicamente, funciona así: lee datos del disco y, después de una iteración en particular, escribe los resultados en el HDFS y luego lee los datos del HDFS para la próxima iteración. Esto es muy ineficiente, ya que implica leer y escribir datos en el disco, lo que implica operaciones de E / S intensas y replicación de datos en todo el clúster para la tolerancia a fallas. Además, cada iteración de MapReduce tiene una latencia muy alta y la siguiente iteración puede comenzar solo después de que el trabajo anterior haya finalizado por completo.

Además, el paso de mensajes requiere puntuaciones de nodos vecinos para evaluar la puntuación de un nodo en particular. Estos cálculos necesitan mensajes de sus vecinos (o datos en múltiples etapas del trabajo), un mecanismo del que carece MapReduce. Se diseñaron diferentes herramientas de procesamiento de gráficos, como Pregel y GraphLab, para abordar la necesidad de una plataforma eficiente para los algoritmos de procesamiento de gráficos. Estas herramientas son rápidas y escalables, pero no son eficientes para la creación y posprocesamiento de estos complejos algoritmos de múltiples etapas.

La introducción de Apache Spark resolvió estos problemas en gran medida. Spark contiene una biblioteca de cálculo de gráficos llamada GraphX ​​que simplifica nuestra vida. El cálculo en memoria junto con la compatibilidad con gráficos integrados mejora el rendimiento del algoritmo en una magnitud de uno o dos grados con respecto a los programas tradicionales de MapReduce. Spark usa una combinación de Netty y Akka para distribuir mensajes entre los ejecutores. Veamos algunas estadísticas que describen el rendimiento del algoritmo de PageRank con Hadoop y Spark.

Algoritmos iterativos de aprendizaje automático:

Casi todos los algoritmos de aprendizaje automático funcionan de forma iterativa. Como hemos visto anteriormente, los algoritmos iterativos implican cuellos de botella de E / S en las implementaciones de MapReduce. MapReduce usa tareas de grano grueso (paralelismo a nivel de tarea) que son demasiado pesadas para los algoritmos iterativos. Spark con la ayuda de Mesos, un kernel de sistema distribuido, almacena en caché el conjunto de datos intermedio después de cada iteración y ejecuta múltiples iteraciones en este conjunto de datos en caché, lo que reduce la E / S y ayuda a ejecutar el algoritmo más rápido de una manera tolerante a fallas.

Spark tiene una biblioteca de aprendizaje automático escalable incorporada llamada MLlib que contiene algoritmos de alta calidad que aprovechan las iteraciones y producen mejores resultados que las aproximaciones de una pasada que a veces se usan en MapReduce.

  • Procesamiento de datos rápido. Como sabemos, Spark permite el procesamiento en memoria. Como resultado, Spark es hasta 100 veces más rápido para los datos en la RAM y hasta 10 veces más rápido para los datos en el almacenamiento.
  • Procesamiento iterativo. Los RDD de Spark permiten realizar varias operaciones de mapas en la memoria, sin necesidad de escribir conjuntos de datos provisionales en un disco.
  • Procesamiento casi en tiempo real. Spark es una excelente herramienta para proporcionar información empresarial inmediata. Esta es la razón por la que Spark se utiliza en el sistema de transmisión de tarjetas de crédito.

'Apache Spark: ¿Asesino o salvador de Apache Hadoop?'

La respuesta a esto: Hadoop MapReduce y Apache Spark no compiten entre sí. De hecho, se complementan bastante bien. Hadoop controla enormes conjuntos de datos mediante sistemas de productos básicos. Spark proporciona procesamiento en memoria en tiempo real para aquellos conjuntos de datos que lo requieran. Cuando combinamos la capacidad de Apache Spark, es decir, alta velocidad de procesamiento, análisis avanzado y soporte de integración múltiple con la operación de bajo costo de Hadoop en hardware básico, brinda los mejores resultados. Hadoop complementa las capacidades de Apache Spark. Spark no puede reemplazar completamente a Hadoop, pero la buena noticia es que la demanda de Spark está actualmente en su punto más alto. Este es el momento adecuado para dominar Spark y aprovechar al máximo las oportunidades profesionales que se le presenten. ¡Empieza ahora!

Tienes una pregunta para nosotros? Menciónelo en la sección de comentarios y nos comunicaremos con usted lo antes posible.

Si desea aprender Spark y construir una carrera en el dominio de Spark para realizar el procesamiento de datos a gran escala utilizando RDD, Spark Streaming, SparkSQL, MLlib, GraphX ​​y Scala con casos de uso de la vida real, consulte nuestro sitio interactivo en vivo en línea. Aquí, que viene con soporte 24 * 7 para guiarlo durante su período de aprendizaje.