2009-08-02 20 views
11

Vorrei analizzare un flusso continuo di dati (a cui si accede tramite HTTP) utilizzando un approccio MapReduce, quindi ho esaminato Apache Hadoop. Sfortunatamente, sembra che Hadoop si aspetti di iniziare un lavoro con un file di input di dimensioni fisse, piuttosto che essere in grado di distribuire nuovi dati ai consumatori non appena arriva. È questo il vero caso o mi manchi qualcosa? Esiste uno strumento MapReduce diverso che funziona con i dati letti da un socket aperto? La scalabilità è un problema qui, quindi preferirei lasciare che MapReducer gestisca la roba di parallelizzazione.Streaming di dati e Hadoop? (non Hadoop Streaming)

Ho giocato con Cascading ed è stato in grado di eseguire un lavoro su un file statico accessibile tramite HTTP, ma questo non risolve il mio problema. Potrei usare curl come passaggio intermedio per scaricare i dati da qualche parte su un filesystem Hadoop e scrivere un watchdog per sparare un nuovo lavoro ogni volta che una nuova porzione di dati è pronta, ma è un trucco sporco; ci deve essere un modo più elegante per farlo. Qualche idea?

risposta

10

L'hack che descrivi è più o meno il modo standard di fare le cose - Hadoop è fondamentalmente un sistema orientato ai batch (per prima cosa, se non c'è fine ai dati, i Reducers non possono mai iniziare, come devono iniziare dopo che la fase della mappa è terminata).

Ruota i registri; quando li si ruota, li si riversa in HDFS. Avere un processo di watchdog (possibilmente distribuito, coordinato usando ZooKeeper) controlla le discariche e avvia nuovi processi di elaborazione. Dovrai assicurarti che i lavori vengano eseguiti su input sufficientemente grandi da garantire il sovraccarico.

Hbase è un clone di BigTable nell'ecosistema hadoop che può essere interessante per te, in quanto consente un flusso continuo di inserti; sarà comunque necessario eseguire query analitiche in modalità batch.

2

Penso che dovresti dare un'occhiata a Esper CEP (http://esper.codehaus.org/).

+0

Non ho molta familiarità con questo campo, ma a prima vista è piaciuto anche ActiveInsight (licenza CPAL - richiede l'attribuzione). –

0

Il tuo caso d'uso sembra simile al problema di scrivere un web crawler usando Hadoop - i flussi di dati (lentamente) dai socket aperti per recuperare le pagine remote via HTTP.

In tal caso, vedere Why fetching web pages doesn't map well to map-reduce. E potresti voler controllare la classe FetcherBuffer in Bixo, che implementa un approccio filettato in un riduttore (tramite Cascading) per risolvere questo tipo di problema.

6

Che dire di http://s4.io/. È fatto per elaborare i dati di streaming.

Aggiornamento

Un nuovo prodotto è in aumento: Storm - distribuita e fault-tolerant in tempo reale il calcolo: stream processing, calcolo continuo, RPC distribuito, e più

+1

Penso che questo sia l'URL corretto per S4: http://incubator.apache.org/s4/ – Bklyn

1

Twitter di Storm è quello che ti serve, puoi provare!

0

Come sapete, i principali problemi con Hadoop per l'utilizzo in stream mining sono il fatto che, per prima cosa, utilizza HFDS, che è un disco e le operazioni del disco portano latenza che determinerà la perdita di dati nel flusso. in secondo luogo, è che la pipeline non è parallela. Riduzione mappa generalmente funziona su batch di dati e non su istanze come avviene con i dati di streaming.

Recentemente ho letto un articolo su M3 che affronta il primo problema apparentemente aggirando HDFS ed eseguendo calcoli in memoria nel database degli oggetti. E per il secondo problema, utilizzano discenti incrementali che non vengono più eseguiti in batch. Ne vale la pena verificarlo M3 : Stream Processing on Main-Memory MapReduce. Non sono riuscito a trovare il codice sorgente o l'API di questa M3 da nessuna parte, se qualcuno l'ha trovato per favore condividi il link qui.

Inoltre, Hadoop online è anche un altro prototipo che tenta di risolvere gli stessi problemi come M3 fa: Hadoop Online

Tuttavia, Apache Storm è la soluzione chiave per il problema, ma non è sufficiente. Hai bisogno di un po 'di ridimensionamento della mappa giusto, ecco perché hai bisogno di una libreria chiamata SAMOA che in realtà ha grandi algoritmi per l'apprendimento online che manca un po'.

1

Più opzioni qui. Suggerisco la combinazione di Kafka e Storm + (Hadoop o NoSql) come soluzione. Abbiamo già creato la nostra piattaforma Big Data utilizzando quegli strumenti opensource, e funziona molto bene.

0

Sul mercato sono disponibili diversi framework e prodotti di elaborazione di stream maturo. I framework open source sono ad es. Apache Storm o Apache Spark (che può essere eseguito sia su Hadoop). È inoltre possibile utilizzare prodotti come IBM InfoSphere Streams o TIBCO StreamBase.

Dai un'occhiata a questo articolo InfoQ, che spiega in dettaglio l'elaborazione dello stream e tutti questi framework e prodotti: Real Time Stream Processing/Streaming Analytics in Combination with Hadoop. Inoltre l'articolo spiega anche come questo sia complementare a Hadoop.

A proposito: molti produttori di software come Oracle o TIBCO chiamano questo flusso di elaborazione/analisi di flussi di dati in streaming "dati veloci" anziché "big data" come si deve agire in tempo reale anziché in batch.

+0

Solo per aggiungere ulteriori informazioni: vedi il mio post sul blog per un confronto dettagliato di [quando utilizzare uno stream processing framweork vs. un prodotto] [1]. In sintesi, è possibile ** utilizzare questi strumenti per elaborare i dati mentre si è in movimento **. Tuttavia, puoi (o devi) salvarli ancora da qualche parte. Pertanto, questi framework e prodotti possono anche essere combinati con Apache Hadoop (solo per lo storage o anche per l'elaborazione eseguendo uno dei framework su Hadoop). Le diapositive discutono anche di questo in modo più dettagliato. [1]: http://www.kai-waehner.de/blog/2015/10/25/comparison-of-stream-processing-frameworks-and-products/ –

0

Dovresti provare Apache Spark Streaming. Dovrebbe funzionare bene per i tuoi scopi.

Problemi correlati