Domanda

Mi piacerebbe analizzare un flusso continuo di dati (accessibile tramite HTTP) usando un approccio MapReduce, quindi ho cercato 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 consegnare nuovi dati ai consumatori appena arrivano. In realtà è questo il caso o mi sto perdendo qualcosa? Esiste un altro strumento MapReduce che funziona con i dati letti da un socket aperto? La scalabilità è un problema qui, quindi preferirei che MapReducer gestisse le cose disordinate di parallelizzazione.

Ho giocato con Cascading e sono stato in grado di eseguire un lavoro su un accesso al file statico tramite HTTP, ma questo non risolve il mio problema. Potrei usare l'arricciatura come passaggio intermedio per scaricare i dati da qualche parte su un filesystem Hadoop e scrivere un cane da guardia per licenziare un nuovo lavoro ogni volta che un nuovo blocco di dati è pronto, ma è un trucco sporco; ci deve essere un modo più elegante per farlo. Qualche idea?

È stato utile?

Soluzione

L'hack che descrivi è più o meno il modo standard di fare le cose - Hadoop è fondamentalmente un sistema orientato al batch (per prima cosa, se non c'è fine ai dati, i Riduttori non potranno mai iniziare, in quanto deve iniziare al termine della fase della mappa).

Ruota i tuoi registri; mentre li ruotate, scaricateli in HDFS. Avere un processo di controllo (possibilmente distribuito, coordinato con ZooKeeper) monitorare le aree di scarico e avviare nuovi processi di elaborazione. Dovrai assicurarti che i lavori vengano eseguiti su input sufficientemente grandi da giustificare il sovraccarico.

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

Altri suggerimenti

Che dire di http://s4.io/ . È fatto per l'elaborazione dei dati di streaming.

Aggiornamento

Sta nascendo un nuovo prodotto: Storm - Calcolo in tempo reale distribuito e tollerante ai guasti: elaborazione del flusso, continua calcolo, RPC distribuito e altro

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

Yahoo S4 http://s4.io/

Fornisce elaborazione di flussi in tempo reale, come la riduzione delle mappe

Twitter Storm è ciò di cui hai bisogno, puoi provare!

Più opzioni qui. Suggerisco la combinazione di Kafka e Storm + (Hadoop o NoSql) come soluzione. Costruiamo già la nostra piattaforma di big data utilizzando quegli strumenti opensource e funziona molto bene.

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

In tal caso, vedi Perché il recupero di pagine Web non esegue correttamente la mappatura per ridurre la mappa . E potresti voler controllare Classe FetcherBuffer in Bixo, che implementa un approccio filettato in un riduttore (tramite Cascading) per risolvere questo tipo di problema.

Come sapete, i problemi principali di Hadoop per l'utilizzo nel flusso di mining sono il fatto che innanzitutto utilizza HFDS che è un disco e le operazioni del disco portano latenza che comporterà la mancanza di dati nel flusso. secondo, è che la pipeline non è parallela. La riduzione delle mappe generalmente opera su lotti di dati e non su istanze come avviene con i dati di flusso.

Di recente ho letto un articolo su M3 che affronta il primo problema apparentemente bypassando HDFS ed eseguendo calcoli in memoria nel database degli oggetti. E per il secondo numero, stanno usando discenti incrementali che non vengono più eseguiti in batch. Vale la pena dare un'occhiata M3 : Elaborazione stream attiva MapReduce memoria principale . Non sono riuscito a trovare il codice sorgente o l'API di questo 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 di M3: Hadoop Online

Tuttavia, Apache Storm è la soluzione chiave al problema, tuttavia non è sufficiente. Hai bisogno di un po 'di euqivalente di riduzione della mappa, ecco perché hai bisogno di una libreria chiamata SAMOA che in realtà ha ottimi algoritmi per l'apprendimento online che manca mahout.

Sul mercato sono disponibili numerosi framework e prodotti per l'elaborazione di flussi maturi. I framework open source sono ad es. Apache Storm o Apache Spark (che possono essere eseguiti entrambi su Hadoop). È inoltre possibile utilizzare prodotti come IBM InfoSphere Streams o TIBCO StreamBase.

Dai un'occhiata a questo articolo di InfoQ, che spiega in dettaglio l'elaborazione dei flussi e tutti questi framework e prodotti: Elaborazione di flussi in tempo reale / Analisi di streaming in combinazione con Hadoop . Oltre all'articolo spiega anche come questo è complementare a Hadoop.

A proposito: molti produttori di software come Oracle o TIBCO chiamano questo approccio di analisi / elaborazione dello streaming di flusso "veloce dati". anziché "big data" poiché devi agire in tempo reale invece dell'elaborazione batch.

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

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top