Pregunta

Me gustaría analizar un flujo continuo de datos (accedido a través de HTTP) utilizando un enfoque de 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 nuevos datos a los consumidores a medida que llegan. ¿Es este realmente el caso, o me estoy perdiendo algo? ¿Existe una herramienta MapReduce diferente que funcione con los datos que se leen desde un socket abierto? La escalabilidad es un problema aquí, por lo que preferiría dejar que MapReducer maneje las cosas de paralelización desordenadas.

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 de un sistema de archivos Hadoop y escribir un perro guardián para disparar un nuevo trabajo cada vez que un nuevo fragmento de datos esté listo, pero eso es un truco sucio; Tiene que haber una forma más elegante de hacer esto. ¿Algunas ideas?

¿Fue útil?

Solución

El truco que describe 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 los datos no tienen fin, los reductores no pueden comenzar nunca, ya que debe comenzar después de que finalice la fase del mapa).

Gire sus registros; a medida que los gira, vuélvalos a HDFS. Haga que un proceso de vigilancia (posiblemente uno distribuido, coordinado usando ZooKeeper) monitoree los vertederos y comience nuevos trabajos de procesamiento. Deberá 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 de hadoop que puede ser interesante para usted, ya que permite un flujo continuo de inserciones; sin embargo, aún deberá ejecutar consultas analíticas en modo por lotes.

Otros consejos

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

Actualizar

Un nuevo producto está en ascenso: Storm - Cálculo distribuido y tolerante a fallas en tiempo real: procesamiento continuo, continuo cálculo, RPC distribuido y más

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

Yahoo S4 http://s4.io/

Proporciona computación de flujo en tiempo real, como reducción de mapa

Twitter Storm es lo que necesita, ¡puede intentarlo!

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

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

Si es así, vea Por qué buscar páginas web no se asigna bien a map-reduce . Y es posible que desee consultar el FetcherBuffer clase en Bixo, que implementa un enfoque roscado en un reductor (a través de Cascading) para resolver este tipo de problema.

Como sabe, los principales problemas con Hadoop para su uso en la minería de secuencias son el hecho de que primero, utiliza HFDS, que es un disco y las operaciones de disco traen latencia que dará como resultado la falta de datos en la secuencia. segundo, es que la tubería no es paralela. Map-reduce generalmente opera en lotes de datos y no en instancias como lo es con datos de flujo.

Recientemente leí un artículo sobre M3 que aborda el primer problema aparentemente al pasar por alto HDFS y realizar cálculos en memoria en la base de datos de objetos. Y para el segundo problema, están utilizando alumnos incrementales que ya no se realizan por lotes. Vale la pena echarle un vistazo M3 : Procesamiento de flujo en Main-Memory MapReduce . No pude encontrar el código fuente o la API de este M3 en ninguna parte, si alguien lo encuentra, comparta el enlace aquí.

Además, Hadoop Online también es otro prototipo que intenta resolver los mismos problemas que M3: Hadoop Online

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

Varios marcos y productos de procesamiento de flujo maduros 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 utilizar productos como IBM InfoSphere Streams o TIBCO StreamBase.

Eche un vistazo a este artículo de InfoQ, que explica el procesamiento continuo y todos estos marcos y productos en detalle: Procesamiento de flujo en tiempo real / Análisis de flujo en combinación con 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 transmisión de datos rápidos "datos rápidos" en lugar de "big data" ya que debe actuar en tiempo real en lugar de procesamiento por lotes.

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

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top