Domanda

Guardando la combinazione di MapReduce e HBase dal punto di vista del flusso di dati, il mio problema sembra adattarsi. Ho un grande insieme di documenti che voglio Mappa, Unire e ridurre. La mia implementazione SQL precedente era di dividere il compito in operazioni batch, cumulativamente immagazzinando quale sarebbe il risultato di una mappa nella tabella e quindi eseguire l'equivalente di una riduzione. Ciò ha avuto il beneficio che in qualsiasi momento durante l'esecuzione (o tra le esecuzioni), ho avuto i risultati della mappa a quel punto nel tempo.

A quanto mi risulta, l'esecuzione di questo lavoro come MapReduce richiederebbe tutte le funzioni della mappa per eseguire ogni volta.

I miei Mappa funzioni (e in effetti qualsiasi funzione) dà sempre la stessa uscita per un dato input. Semplicemente non c'è punto in uscita ri-calcolo se io non devo. Il mio ingresso (un insieme di documenti) sarà in continua crescita e viene portato a termine un'operazione MapReduce periodicamente sui dati. Tra le esecuzioni Dovrei veramente solo avere per calcolare le funzioni della mappa per i documenti appena aggiunti.

I miei dati saranno probabilmente HBase -> MapReduce -> HBase. Dato che Hadoop è un intero ecosistema, può essere in grado di sapere che una determinata funzione è stato applicato ad una riga con un dato identità. Sto assumendo le voci immutabili nella tabella HBase. Fa / può Hadoop tener conto di questo?

Sono fatto a conoscenza dalla documentazione (in particolare i video Cloudera) che ri-calcolo (di dati potenzialmente ridondanti) può essere più veloce di persistere e il recupero per la classe di problema che Hadoop viene utilizzato per.

Eventuali commenti / risposte?

È stato utile?

Soluzione

Se stai cercando di evitare l'esecuzione della mappa PASSO ogni volta, rompere fuori come il proprio passo (sia utilizzando l'IdentityReducer o impostare il numero di riduttori per il lavoro a 0) ed eseguire successivi passaggi utilizzando l'output di la vostra mappa passo.

Se questo è in realtà più veloce di ricalcolare dai dati grezzi ogni volta dipende dalla i dati di uscita del volume e la forma dei dati di input contro, quanto sia complicato la vostra mappa passo è, ecc.

Si noti che esegue il mapping sui nuovi insiemi di dati non aggiungerà alle piste precedenti - ma si può aggirare il problema utilizzando una cartella di output datato. Questo per dire che è possibile memorizzare l'output di mappare il tuo primo lotto di file in my_mapper_output/20091101, e lotto della settimana prossima in my_mapper_output/20091108, ecc Se si vuole ridurre su tutto il set, si dovrebbe essere in grado di passare in my_mapper_output come cartella di input, e prendere tutti i set di uscita.

Altri suggerimenti

Perché non applicare il flusso di lavoro di SQL in un ambiente diverso? Significato, aggiungere una colonna "elaborati" al vostro tavolo di ingresso. Quando arriva il momento di eseguire una sintesi, eseguire una pipeline che va qualcosa come:

mappa (map_function) il (tavolo ingresso filtrato da trasformati!); memorizzare in map_outputs sia in HBase o semplicemente HDFS.

mappa (ridurre la funzione) sul (map_outputs); memorizzare in HBase.

È possibile rendere la vita un po 'più facile, supponendo che si memorizzano i dati in HBase ordinati per data di inserimento, se si registra da qualche parte timestamp di piste di sintesi di successo, e aprire il filtro sugli ingressi che sono datati tardi rispetto allo scorso sintesi di successo - si risparmia un po 'di tempo di scansione significativo.

Ecco una presentazione interessante che dimostra come una società architettato loro flusso di lavoro (anche se non usano HBase): http: //www.scribd. com / doc / 20971412 / Hadoop-World-produzione-Deep-Dive-con-High-Availability

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