spark español java hadoop scalability real-time mahout

java - español - Hadoop, alternativa de procesamiento en tiempo real Mahout



apache spark (4)

Tenía la intención de usar hadoop como "clúster de computación" en mi proyecto. Sin embargo, luego leí que Hadoop no está habilitado para sistemas en tiempo real debido a los gastos generales relacionados con el inicio de un trabajo. Estoy buscando una solución que pueda usarse de esta manera: trabajos que podrían escalarse fácilmente en múltiples máquinas pero que no requieren muchos datos de entrada. Además, deseo utilizar los trabajos de aprendizaje automático, por ejemplo, el uso creado antes de la red neuronal en tiempo real.

¿Qué bibliotecas / tecnologías puedo usar para este propósito?


Dado el hecho de que desea una respuesta en tiempo real en el área de "segundos", recomiendo algo como esto:

  1. Configure un modelo de procesamiento por lotes para pre-computar tanto como sea posible. Esencialmente trate de hacer todo lo que no dependa de los datos del "último segundo". Aquí puede usar una configuración regular de Hadoop / Mahout y ejecutar estos lotes diariamente o (si es necesario) cada hora o incluso 15 minutos.

  2. Use un sistema en tiempo real para hacer las últimas cosas que no se pueden calcular previamente. Para esto, debería mirar utilizando el s4 mencionado o la tormenta de twitter recientemente anunciada.

A veces vale la pena ir realmente simple y almacenar los valores precomputados en la memoria y simplemente hacer los últimos pasos de agregación / filtro / clasificación / ... en la memoria. Si puede hacer eso, realmente puede escalar porque cada nodo puede ejecutarse de manera completamente independiente de todos los demás.

Quizás tener un backend NoSQL para tu componente en tiempo real ayude. Hay muchos de esos disponibles: mongodb, redis, riak, cassandra, hbase, couchdb, ...

Todo depende de tu aplicación real.


Lo que está tratando de hacer sería un mejor ajuste para HPCC, ya que tiene tanto el motor de procesamiento de datos de back-end (equivalente a Hadoop) como el motor de entrega de datos en tiempo real de front-end, eliminando la necesidad de aumentar la complejidad hasta el tercero. componentes del partido. Y algo bueno de HPCC es que ambos componentes se programan usando el mismo lenguaje y paradigmas de programación exactos. Échales un vistazo en: http://hpccsystems.com


Tiene razón, Hadoop está diseñado para el procesamiento por lotes.

Al leer la pregunta, pensé en el marco de Storm que se abrió recientemente en Twitter, que puede considerarse como "Hadoop para procesamiento en tiempo real".

Storm facilita la escritura y la escala de cálculos complejos en tiempo real en un grupo de computadoras, haciendo para el procesamiento en tiempo real lo que Hadoop hizo para el procesamiento por lotes. Storm garantiza que todos los mensajes serán procesados. Y es rápido: puede procesar millones de mensajes por segundo con un pequeño grupo. Lo mejor de todo es que puedes escribir topologías Storm utilizando cualquier lenguaje de programación.

(desde: InfoQ post )

Sin embargo, todavía no he trabajado con él, por lo que realmente no puedo decir mucho al respecto en la práctica.

Publicación de blog de ingeniería de Twitter: http://engineering.twitter.com/2011/08/storm-is-coming-more-details-and-plans.html
Github: https://github.com/nathanmarz/storm


S4 también S4 , lanzado inicialmente por Yahoo! y su ahora proyecto de incubadora apache. Ha existido por un tiempo, y encontré que era bueno para algunas cosas básicas cuando hice una prueba de concepto. Aunque no lo he usado extensivamente.