¿Qué es Spark?
Spark ha sido llamado un “motor de procesamiento de datos distribuido de propósito general” y “un motor de análisis unificado ultrarrápido para big data y machine learning“.
Le permite procesar grandes conjuntos de datos más rápido al dividir el trabajo en fragmentos y asignar esos fragmentos a los recursos computacionales.
Puede manejar hasta petabytes (¡eso es millones de gigabytes!) De datos y administrar hasta miles de máquinas físicas o virtuales.
Algunas características distintivas incluyen el uso de la memoria y el enfoque en el desarrollo fácil. Intenta mantener todos los datos en la memoria, solo escribiendo en los discos si no hay suficiente memoria.
Tenga en cuenta que esto corre el riesgo de necesitar reiniciar desde cero en caso de falla, en beneficio de eliminar los procesos de lectura y escritura que requieren mucho tiempo. Facilita el desarrollo con énfasis en el diseño de API e integración con varios idiomas y herramientas.
¿Por qué querrías usar Spark?
Spark tiene algunas grandes ventajas:
- Consulta, análisis y transformación de datos de alta velocidad con grandes conjuntos de datos.
- En comparación con MapReduce, Spark ofrece mucho menos lectura y escritura desde y hacia el disco, tareas de subprocesos múltiples (de Wikipedia : los subprocesos comparten los recursos de uno o varios núcleos) dentro de los procesos de Java Virtual Machine (JVM)
- Excelente para algoritmos iterativos (usando una secuencia de estimaciones basadas en la estimación previa).
- Como se mencionó anteriormente, las API fáciles de usar marcan una gran diferencia en términos de facilidad de desarrollo, legibilidad y mantenimiento.
- Súper rápido, especialmente para consultas interactivas. (¡100 veces más rápido que las consultas clásicas de Hadoop Hive sin refactorizar el código!)
- Admite múltiples idiomas e integraciones con otros productos populares.
- Ayuda a hacer que las canalizaciones de datos complejas sean coherentes y fáciles.
¿Cuándo funciona mejor?
- Si ya está utilizando un lenguaje compatible (Java, Python, Scala, R)
- Spark hace que trabajar con datos distribuidos (Amazon S3, MapR XD, Hadoop HDFS) o bases de datos NoSQL (MapR Database, Apache HBase, cc, MongoDB) sea perfecto
- Cuando usa programación funcional (la salida de funciones solo depende de sus argumentos, no de estados globales)
Algunos usos comunes:
- Realizar trabajos por lotes ETL o SQL con grandes conjuntos de datos.
- Procesamiento de transmisión, datos en tiempo real de sensores, IoT o sistemas financieros, especialmente en combinación con datos estáticos.
- Usando la transmisión de datos para activar una respuesta.
- Realizar análisis de sesión complejos (por ejemplo, agrupar usuarios en función de la actividad web).
- Tareas de aprendizaje automático.
¿Cuándo no quieres usar Spark?
Para sistemas multiusuario, con memoria compartida, Hive puede ser una mejor opción. Para el procesamiento en tiempo real y de baja latencia, puede preferir Apache Kafka . Con pequeños conjuntos de datos, no le dará grandes ganancias, por lo que probablemente sea mejor con las bibliotecas y herramientas típicas.