2009-08-02 18 views
11

Me gustaría analizar un flujo continuo de datos (a través de HTTP) utilizando un enfoque MapReduce, así que he estado buscando en Apache Hadoop. Desafortunadamente, parece que Hadoop espera comenzar un trabajo con un archivo de entrada de tamaño fijo, en lugar de poder entregar datos nuevos a los consumidores a medida que llegan. ¿Es este el caso, o me estoy perdiendo algo? ¿Existe una herramienta MapReduce diferente que funcione con datos que se leen desde un socket abierto? La escalabilidad es un problema aquí, por lo que preferiría dejar que MapReducer maneje las complicadas cosas de la paralelización.Transmisión de datos y Hadoop? (no Hadoop Streaming)

He jugado con Cascading y pude ejecutar un trabajo en un archivo estático al que se accede a través de HTTP, pero esto en realidad no resuelve mi problema. Podría usar curl como un paso intermedio para volcar los datos en algún lugar en un sistema de archivos Hadoop y escribir un perro guardián para iniciar un nuevo trabajo cada vez que un nuevo fragmento de datos esté listo, pero eso es un hack sucio; tiene que haber una manera más elegante de hacer esto. ¿Algunas ideas?

Respuesta

10

El hack que describes es más o menos la forma estándar de hacer las cosas: Hadoop es fundamentalmente un sistema orientado a lotes (por un lado, si no hay fin para los datos, los Reductores no pueden comenzar nunca, deben comenzar después de que la fase del mapa haya terminado).

Gire sus registros; a medida que los gira, colóquelos en HDFS. Tener un proceso de vigilancia (posiblemente uno distribuido, coordinado usando ZooKeeper) monitorear los vertederos y comenzar nuevos trabajos de procesamiento. Querrá asegurarse de que los trabajos se ejecuten en entradas lo suficientemente grandes como para garantizar la sobrecarga.

Hbase es un clon de BigTable en el ecosistema hadoop que puede ser interesante para usted, ya que permite un flujo continuo de inserciones; de todos modos, necesitará ejecutar consultas analíticas en modo batch.

2

Creo que debería echar un vistazo a Esper CEP (http://esper.codehaus.org/).

+0

No estoy muy familiarizado con este campo, pero a primera vista también me gustó ActiveInsight (licencia de CPAL: requiere atribución). –

0

Su caso de uso suena similar al problema de escribir un rastreador web usando Hadoop: los flujos de datos regresan (lentamente) desde los sockets abiertos para buscar páginas remotas a través de HTTP.

Si es así, entonces vea Why fetching web pages doesn't map well to map-reduce. Y es posible que desee verificar la clase FetcherBuffer en Bixo, que implementa un enfoque roscado en un reductor (a través de conexión en cascada) para resolver este tipo de problema.

6

¿Qué pasa con http://s4.io/. Está hecho para procesar datos de transmisión.

actualización

Un nuevo producto va en aumento: Storm - Distribuido y tolerante a fallos en tiempo real de cálculo: procesamiento de flujos, la computación continua, RPC distribuido, y más

+1

Creo que esta es la URL correcta para S4: http://incubator.apache.org/s4/ – Bklyn

1

Yahoo S4 http://s4.io/

Se proporcionan bienes cómputo de secuencia de tiempo, como mapa reducir

1

Twitter's Storm es lo que necesita, ¡puede intentarlo!

0

Como sabe, los principales problemas con Hadoop para el uso en la extracción de secuencias son el hecho de que primero utiliza HFDS, que es un disco, y las operaciones de disco generan latencia que dará como resultado datos faltantes en la transmisión. segundo, es que la tubería no es paralela. Map-reduce generalmente opera en lotes de datos y no en instancias, como ocurre con los datos de flujo.

Hace poco leí un artículo sobre M3 que aborda el primer problema al aparentemente omitir HDFS y realizar cálculos en memoria en la base de datos de objetos. Y para el segundo problema, están usando aprendices incrementales que ya no se realizan por lotes. Vale la pena echarle un vistazo M3 : Stream Processing on Main-Memory MapReduce. No pude encontrar el código fuente o la API de este M3 en ninguna parte. Si alguien lo encontró, comparte el enlace aquí.

Además, Hadoop en línea es también otro prototipo que attemps para resolver los mismos problemas que hace M3: Hadoop Online

Sin embargo, Apache Storm es la solución clave al problema, sin embargo, no es suficiente. Necesitas un poco de euqivalent de map-reduce right, aquí es por qué necesitas una biblioteca llamada SAMOA que en realidad tiene grandes algoritmos para el aprendizaje en línea que mahout carece.

1

Múltiples opciones aquí. Sugiero la combinación de Kafka y Storm + (Hadoop o NoSql) como solución. Ya construimos nuestra plataforma de big data utilizando esas herramientas de código abierto, y funciona muy bien.

0

Varios marcos y productos maduros de procesamiento de flujo están disponibles en el mercado. Los marcos de código abierto son, p. Apache Storm o Apache Spark (que pueden ejecutarse sobre Hadoop). También puede usar productos como IBM InfoSphere Streams o TIBCO StreamBase.

Eche un vistazo a este artículo de InfoQ, que explica el procesamiento de flujo y todos estos marcos y productos en detalle: Real Time Stream Processing/Streaming Analytics in Combination with Hadoop. Además, el artículo también explica cómo esto es complementario a Hadoop. Por cierto: Muchos proveedores de software como Oracle o TIBCO llaman a este enfoque de procesamiento de flujo/análisis de datos "rápidos" en lugar de "big data" ya que tiene que actuar en tiempo real en lugar de procesamiento por lotes.

+0

Solo para agregar algo más de información: Consulte la publicación de mi blog para obtener una comparación detallada de [cuándo usar una secuencia de procesamiento de framweork vs. un producto] [1]. En resumen, ** puede utilizar estas herramientas para procesar datos en movimiento **. Sin embargo, puede (o debe) todavía almacenarlos en algún lugar. Por lo tanto, estos marcos y productos también se pueden combinar con Apache Hadoop (solo para almacenamiento o también para procesamiento ejecutando uno de los marcos en Hadoop). Las diapositivas también discuten esto con más detalle. [1]: http://www.kai-waehner.de/blog/2015/10/25/comparison-of-stream-processing-frameworks-and-products/ –

0

Debería probar Apache Spark Streaming. Debería funcionar bien para sus propósitos.

Cuestiones relacionadas