La diferencia y comparación entre hadoop, storm y spark
1. ¿Cuál debo elegir entre hadoop y Storm?
Para distinguir Hadoop y Storm, esta sección responderá las siguientes preguntas:
1. ¿Qué operaciones son Hadoop y Storm?
2. Storm llamado Para sistemas informáticos de transmisión
3. Para qué escenarios es adecuado Hadoop y bajo qué circunstancias se debe utilizar Hadoop
4. ¿Qué es el rendimiento?
Primero de. Todos, tengan una comprensión general: Hadoop es computación a nivel de disco. Al realizar cálculos, los datos están en el disco y deben leerse y escribirse desde el disco. Storm es computación a nivel de memoria y los datos se importan directamente al; memoria a través de la red. La lectura y escritura de la memoria es n órdenes de magnitud más rápida que la lectura y escritura del disco. Según el material didáctico Harvard CS61, la latencia de acceso al disco es aproximadamente 75.000 veces mayor que la latencia de acceso a la memoria. Entonces Storm es más rápido.
Notas:
1. Latencia se refiere al tiempo desde la generación de datos hasta el cálculo de los resultados. "Rápido" debe referirse principalmente a esto.
2. El rendimiento se refiere a la cantidad de datos procesados por el sistema por unidad de tiempo.
La transmisión de red directa y la computación en memoria de Storm tienen una latencia mucho menor que la transmisión de Hadoop a través de HDFS. Cuando el modelo informático es más adecuado para la transmisión, el procesamiento de transmisión de Storm elimina la necesidad de procesamiento por lotes. datos, debido a que Storm es un trabajo de tipo servicio, también elimina el retraso en la programación del trabajo. Entonces, desde una perspectiva de latencia, Storm es más rápido que Hadoop.
Desde una perspectiva de principio:
Hadoop M/R se basa en HDFS y necesita dividir datos de entrada, generar archivos de datos intermedios, ordenar, comprimir datos, realizar copias múltiples, etc. y es más eficiente.
Storm se basa en ZeroMQ, una biblioteca de mensajería de alto rendimiento, y no conserva datos.
¿Por qué Storm es más rápido que Hadoop? Aquí hay un escenario de aplicación.
Hablemos de un escenario típico. Miles de productores de registros generan archivos de registro que requieren que se almacenen algunas operaciones ETL. una base de datos.
Suponiendo que se utiliza Hadoop, primero debe almacenarse en HDFS y calcularse en función de la granularidad de cortar un archivo cada minuto (esta granularidad ya es extremadamente fina y, si es más pequeña, habrá Habría un montón de archivos pequeños en HDFS). Cuando Hadoop comenzó a calcular, había pasado 1 minuto y luego tomó otro minuto para comenzar a programar la tarea. Luego, el trabajo comenzó a ejecutarse. en unos minutos, luego tomó muy poco tiempo escribir la base de datos, de esta manera, han pasado al menos más de dos minutos desde que se generan los datos hasta que finalmente se pueden utilizar.
Cuando se generan datos informáticos de transmisión, existe un programa para monitorear la generación de registros. Cuando se genera una línea, se envía al sistema informático de transmisión a través de un sistema de transmisión y luego al sistema informático de transmisión. Procese directamente y después del procesamiento, escriba directamente en la base de datos. El proceso desde la generación hasta la escritura de cada dato en la base de datos se puede completar en el nivel de milisegundos cuando los recursos son suficientes.
Al mismo tiempo, hablemos de otro escenario:
Si el recuento de palabras de un archivo grande se coloca en Storm para su procesamiento en streaming, Storm esperará hasta que se hayan procesado todos los datos existentes. En este momento, se compara la velocidad con Hadoop. En este momento, la comparación no es el retraso, sino el rendimiento.
------------------------------------------- -------------------------------------------------- -- ----------------------------------
El aspecto más importante: los usos de Hadoop discos Como medio de intercambio intermedio, los datos de tormentas siempre fluyen en la memoria.
Los dos campos no son exactamente iguales. Uno es el procesamiento por lotes, basado en la programación de tareas; el otro es el procesamiento en tiempo real, basado en secuencias.
Tome el agua como ejemplo. Hadoop se puede considerar como agua pura, que se transporta en cubos; mientras que Storm usa tuberías de agua, que están preconectadas (Topología), y luego se abre el grifo y el agua saldrá continuamente.
------------------------------------------- ----- --------------------------------------------- ----- ----------------------------------
Nathan Marz, Tormenta El ingeniero jefe dijo: Storm puede escribir y expandir fácilmente cálculos complejos en tiempo real en un grupo de computadoras. Storm es para el procesamiento en tiempo real lo que Hadoop es para el procesamiento por lotes. Storm garantiza que se procesarán todos los mensajes y es rápido: se pueden procesar millones de mensajes por segundo en un clúster pequeño. Aún mejor es que puedes utilizar cualquier lenguaje de programación para el desarrollo.
Las principales características de Storm son las siguientes:
1. De manera similar a cómo MapReduce reduce la complejidad del procesamiento por lotes paralelo, Storm reduce la complejidad del procesamiento en tiempo real.
2. Se pueden utilizar varios lenguajes de programación. Puedes utilizar varios lenguajes de programación además de Storm. Clojure, Java, Ruby y Python son compatibles de forma predeterminada. Para agregar soporte para otros idiomas, simplemente implemente un protocolo de comunicación Storm simple.
3. Tolerancia a fallos. Storm gestiona fallas de trabajadores y nodos.
4. Ampliación horizontal. Los cálculos se realizan en paralelo a través de múltiples subprocesos, procesos y servidores.
5. Procesamiento confiable de mensajes. Storm garantiza que cada mensaje se procesará completamente al menos una vez. Cuando una tarea falla, es responsable de reintentar el mensaje desde la fuente.
6. El diseño del sistema garantiza que los mensajes se puedan procesar rápidamente, utilizando MQ como cola de mensajes subyacente.
7. Modo local. Storm tiene un "modo local" que emula completamente un clúster de Storm durante el procesamiento. Esto le permite desarrollar y realizar pruebas unitarias rápidamente.
------------------------------------------- ----- --------------------------------------------- ----- ----------------------------------
Bajo la condición de que los recursos consumidos son los mismos. En términos generales, la latencia de Storm es menor que la de MapReduce. Pero el rendimiento también es menor que el de mapreduce. Storm es un sistema informático de flujo típico y mapreduce es un sistema de procesamiento por lotes típico. Los siguientes procesos del sistema de procesamiento por lotes y computación de flujo
Este proceso de procesamiento de datos se puede dividir aproximadamente en tres etapas:
1 Recopilación y preparación de datos
2. Cálculo de datos (que implica almacenamiento intermedio en el cálculo), "esos aspectos están determinados" en el título de la pregunta debe referirse principalmente al método de procesamiento en esta etapa.
3. Visualización de resultados de datos (comentarios)
1) En la etapa de recopilación de datos, la estrategia de procesamiento típica actual: el sistema de generación de datos generalmente proviene de la gestión de páginas y el análisis del registro de base de datos. , flow El cálculo recopilará los datos en la cola de mensajes (como kafaka, metaQ, timetunle), etc. Los sistemas de procesamiento por lotes generalmente recopilan datos en sistemas de archivos distribuidos (como HDFS) y, por supuesto, algunos utilizan colas de mensajes. Llamemos temporalmente a la cola de mensajes y al almacenamiento de preprocesamiento del sistema de archivos. No hay mucha diferencia entre los dos en términos de latencia y rendimiento. Hay una gran diferencia entre este almacenamiento de preprocesamiento y la etapa de cálculo de datos. La computación de flujo generalmente lee datos de la cola de mensajes en el sistema de computación de flujo (tormenta) en tiempo real. Para realizar cálculos, un sistema de procesamiento por lotes generalmente guardará un lote grande y luego lo importará al sistema informático (hadoop) en lotes. Aquí hay una diferencia en el retraso.
2) En la etapa de cálculo de datos, la baja latencia del sistema de computación de flujo (Storm) tiene principalmente los siguientes aspectos (en respuesta a la pregunta del tema)
A: El proceso de tormenta es residente Sí, los datos se pueden procesar en tiempo real
Después de guardar un lote de datos de mapreduce, el sistema de gestión de trabajos inicia la tarea, Jobtracker calcula la asignación de tareas y Tasktacker inicia la informática relacionada. proceso
B: Los datos entre cada unidad informática de stom se transmiten directamente a través de la red (zeromq).
Los resultados de la operación de la tarea de mapa mapreduce deben escribirse en HDFS y la tarea de reducción se arrastra a través de la red para su operación. En términos relativos, hay más lecturas y escrituras en disco, lo que es más lento
C: para operaciones complejas
El modelo de operación de Storm admite directamente DAG (gráfico acíclico dirigido)
Mapreduce requiere múltiples procesos de MR y algunas operaciones de mapas no tienen sentido
3) Visualización de resultados de datos
Los resultados de las operaciones generales de la computación de flujo se retroalimentan directamente al conjunto de resultados final (mostrar página, base de datos, índice del motor de búsqueda). Mapreduce generalmente requiere que los resultados se importen al conjunto de resultados en lotes una vez completada toda la operación.
No existe una diferencia esencial entre la computación de flujo real y los sistemas de procesamiento por lotes como Trident, que también tiene el concepto de lotes, y mapreduce puede reducir el conjunto de datos para cada operación (como comenzar cada pocos minutos). Puma de Facebook es un sistema informático de transmisión basado en hadoop.
2. Comparación entre los motores de computación paralela de alto rendimiento Storm y Spark
Spark se basa en el concepto de que cuando los datos son enormes, es mejor pasar el proceso de cálculo al procesador. datos que pasar los datos al proceso de cálculo. Ser más eficiente. Cada nodo almacena (o almacena en caché) su conjunto de datos y luego las tareas se envían al nodo.
Entonces esto es pasar el proceso a los datos. Esto es muy similar a Hadoop map/reduce, excepto que la memoria se usa activamente para evitar operaciones de E/S, lo que hace que los algoritmos iterativos (donde la salida del cálculo anterior es la entrada del siguiente cálculo) tengan más rendimiento.
Shark es solo un motor de consultas basado en Spark (que admite consultas de análisis temporales ad-hoc)
La arquitectura de Storm es completamente opuesta a Spark. Storm es un motor informático de flujo distribuido. Cada nodo implementa un proceso computacional básico, mientras que los elementos de datos entran y salen de los nodos de la red interconectados. A diferencia de Spark, éste pasa datos al proceso.
Ambos frameworks se utilizan para computación paralela que maneja grandes cantidades de datos.
Storm es mejor para procesar dinámicamente "pequeños fragmentos de datos" generados en grandes cantidades (como calcular algunas funciones de agregación o análisis en tiempo real en flujos de datos de Twitter).
Spark funciona con conjuntos de datos existentes (como datos de Hadoop) que se han importado al clúster de Spark. Spark puede realizar escaneo de noticias basado en la administración en memoria y minimizar las operaciones de E/S globales de algoritmos iterativos.
Sin embargo, el módulo Spark Streaming es similar a Storm (ambos son motores de computación de flujo), aunque no exactamente igual.
El módulo de transmisión Spark primero agrega datos por lotes y luego distribuye bloques de datos (procesados como datos inmutables), mientras que Storm procesa y distribuye datos en tiempo real siempre que los reciba.
No estoy seguro de qué método tiene la ventaja en el rendimiento de datos, pero el retraso del tiempo de cálculo de Storm es menor.
En resumen, Spark y Storm tienen diseños opuestos, y Spark Steaming es similar a Storm. El primero tiene una ventana de suavizado de datos (ventana deslizante), mientras que el segundo necesita mantener esta ventana por sí mismo.