La batalla entre Spark y Hadoop MapReduce, ¿quién es más poderoso?
Spark y Hadoop MapReduce tienen dos opiniones en la industria: una es que Spark reemplazará a Hadoop MapReduce y se convertirá en la dirección de desarrollo futuro del procesamiento de big data; la otra es que Spark se combinará con Hadoop para formar una; ecosistema más grande. De hecho, Spark y Hadoop MapReduce se centran en diferentes áreas de aplicación. En comparación con Hadoop MapReduce, Spark tiene la sensación de "mejor que el azul". Spark está desarrollado en base al modelo Hadoop MapReduce. ¡Podemos ver claramente la sombra de MapReduce en él! All Spark no es una innovación desde cero, sino que se apoya en el gigante "MapReduce". Los méritos y deméritos quedan para que los comenten las generaciones futuras. Dejemos de lado la controversia y echemos un vistazo a las ventajas de Spark en comparación con Hadoop MapReduce.
1. Velocidad de computación
Lo primero que persigue el procesamiento de big data es la velocidad. ¿Qué tan rápido es Spark? En palabras oficiales, "Spark permite que las aplicaciones en clústeres de Hadoop se ejecuten 100 veces más rápido en la memoria y 10 veces más rápido incluso cuando se ejecutan en el disco". Algunos lectores pueden quedar impresionados por esto, pero es cierto: Spark es mucho más rápido que MapReduce en áreas que requieren cálculo iterativo, y cuantas más iteraciones, más obvia se vuelve la ventaja de Spark. Esto se debe a que Spark aprovecha el hecho de que la memoria del servidor es cada vez mayor, logrando ganancias de rendimiento al reducir la E/S del disco. Pusieron todos los datos de procesamiento intermedio en MapReduce. Mantienen todos los datos de procesamiento intermedio en la memoria y solo los envían al disco cuando es necesario. Los lectores pueden preguntar: si mi aplicación es particularmente grande, ¿cuántos gigabytes de memoria puedo ponerle? ¿Cuanto es la respuesta? GB? Actualmente, la memoria del servidor IBM se ha ampliado a varios terabytes.
2. La aplicación es flexible y fácil de usar
¿Sabes por qué Lester de AMPLab abandonó MapReduce? Porque necesita invertir mucha energía en los modelos de programación Map y Reduce, lo cual es extremadamente inconveniente. Además de las operaciones simples de asignación y reducción, Spark admite consultas SQL, consultas de transmisión y consultas complejas, como algoritmos de aprendizaje automático, listos para usar. Al mismo tiempo, los usuarios pueden combinar estas funciones sin problemas dentro del mismo flujo de trabajo, lo que hace que la aplicación sea extremadamente flexible.
El código central de Spark son 63 archivos Scala, lo cual es muy liviano. Permite a los desarrolladores de Java, Scala y Python trabajar en su entorno de lenguaje familiar, facilita varias industrias con API estándar integradas en Java, Scala, Python y SQL (para consultas interactivas) e incluye una gran cantidad de herramientas listas para usar. Biblioteca de aprendizaje automático fácil de usar. Contiene más de 80 operadores avanzados que permiten consultas interactivas en el shell. Incluso los principiantes pueden empezar fácilmente.
3. Compatible con la competencia
Spark puede ejecutarse de forma independiente y leer cualquier dato de Hadoop existente, y también puede ejecutarse en la administración del clúster YARN actual. Puede ejecutarse en cualquier fuente de datos de Hadoop como HBase, HDFS, etc.
Esta característica facilita a los usuarios que desean migrar de aplicaciones Hadoop a Spark, y Spark también es compatible con la competencia, entonces, ¿por qué preocuparse por no ser compatible?
4. Rendimiento extraordinario de procesamiento en tiempo real
MapReduce es más adecuado para procesar datos fuera de línea (por supuesto, después de YARN, Hadoop también se puede utilizar para el procesamiento de transmisión con otras herramientas). Spark también puede admitir computación de transmisión en tiempo real, confiando en Spark Streaming para el procesamiento de datos en tiempo real. Spark Streaming tiene una potente API que permite a los usuarios desarrollar rápidamente aplicaciones de streaming. A diferencia de otras soluciones de transmisión como Storm, Spark Streaming realiza gran parte del trabajo de recuperación y entrega sin código ni configuración adicionales.
5. Gran contribución de la comunidad
La evolución de los lanzamientos de Spark es un testimonio de la vitalidad y la comunidad activa de la plataforma. Especialmente desde 2013, Spark ha experimentado un período de rápido crecimiento, con aumentos significativos tanto en los compromisos de la base de código como en la actividad de la comunidad. Entre todos los proyectos de código abierto de la Fundación Apache, Spark se ubica entre los tres primeros en términos de actividad. En comparación con otras plataformas o marcos de big data, Spark es uno de los proyectos más activos en la base de código.
Spark está orientado a la comunidad y está muy bien organizado, con reuniones periódicas e irregulares relacionadas con Spark. La conferencia se divide en dos categorías: Spark Summit y Spark Meetup. La primera es una cumbre muy influyente a la que asiste el personal técnico de Spark más importante del mundo y se ha celebrado durante tres años consecutivos en San Francisco de 2013 a 2015; Evento para la comunidad Spark. Reuniones ocasionales. Spark Meetup también se lleva a cabo regularmente en algunas ciudades importantes de China, como Beijing, Shenzhen, Xi'an, etc. Los lectores pueden seguir la cuenta pública local de WeChat para participar.
Escenarios aplicables de Spark
Desde la perspectiva de los requisitos de procesamiento de big data, las empresas de big data se pueden dividir aproximadamente en las siguientes tres categorías:
(1) Complejo Para el procesamiento de datos por lotes, el lapso de tiempo suele oscilar entre decenas de minutos y varias horas.
(2) Consulta interactiva basada en datos históricos, el lapso de tiempo suele oscilar entre decenas de segundos y varios minutos.
(3) Procesamiento de datos basado en flujo de datos en tiempo real, el lapso de tiempo suele oscilar entre cientos de milisegundos y segundos.
Actualmente, existen muchos software comerciales y de código abierto relativamente maduros que pueden manejar los tres escenarios anteriores: para el primer negocio, puede usar MapReduce para el procesamiento de datos por lotes, para el segundo negocio, puede usar Impala; Realice consultas interactivas; para el tercer tipo de procesamiento de datos de transmisión, puede pensar en Storm, una herramienta profesional de procesamiento de datos de transmisión. Pero aquí hay una pregunta muy importante: para la mayoría de las empresas de Internet, generalmente se encontrarán con los tres escenarios anteriores al mismo tiempo. Si se utilizan diferentes tecnologías de procesamiento para enfrentar estos tres escenarios, los datos de entrada y salida de estos tres escenarios también lo serán. Si no se pueden compartir sin problemas, es posible que sea necesario convertirlos a formatos de software de código abierto, y cada uno requiere un equipo de desarrollo y mantenimiento, lo que aumenta los costos. Otro inconveniente es que la coordinación de la asignación de recursos entre sistemas del mismo grupo es más difícil.
Entonces, ¿existe algún software que pueda manejar las tres situaciones anteriores? Spark puede o hace posible hacer esto, ya que admite cálculos complejos por lotes, interoperables y de transmisión, es compatible con sistemas de archivos distribuidos como HDFS y Amazon S3, y está disponible en administradores de recursos de clúster populares como Deployed on YARN y Mesos).
Desde la filosofía de diseño de Spark (un marco informático iterativo basado en memoria), es más adecuado para aplicaciones que tienen operaciones iterativas o requieren múltiples operaciones en un conjunto de datos específico. Además, cuanto mayor sea el número de iteraciones y mayor la cantidad de datos leídos, más obvio será el efecto de la aplicación Spark. Por lo tanto, para aplicaciones "iterativas" como el aprendizaje automático, se puede decir que Spark es útil y docenas de veces más rápido que Hadoop MapReduce. Además, Spark Streaming se puede utilizar para el procesamiento de big data en tiempo real, ya que puede almacenar datos intermedios en la memoria, lo que lo hace muy rápido.
Por supuesto, hay ocasiones en las que Spark no funciona. Para aplicaciones de actualización de estado detalladas asíncronas, como el almacenamiento de servicios web o el rastreo e indexación web incrementales, para las cuales el modelo no es adecuado para aplicaciones de modificación incremental. Spark tampoco es adecuado para procesar cantidades de datos extremadamente grandes. Lo "extremadamente grande" aquí es relativo a la capacidad de memoria del clúster, porque Spark necesita almacenar datos en el clúster. Spark tampoco es adecuado para procesar cantidades de datos extremadamente grandes, donde "extremadamente grande" es relativo a la capacidad de memoria del clúster, porque Spark almacena datos en la memoria. En términos generales, 10 TB o más (para un único análisis) se consideran datos "muy grandes".
En términos generales, Spark es una buena opción para centros de datos pequeños y medianos donde la cantidad de datos en un solo cálculo no es grande. Además, Spark no es adecuado para plataformas de computación en la nube híbrida, porque en las plataformas de computación en la nube híbrida, la transmisión de red es un gran problema, e incluso si existe una banda ancha dedicada para transmitir datos entre el clúster de la nube y el clúster local, todavía no es suficiente en comparación. a la velocidad de lectura de la memoria.