Per creare lavori MapReduce è possibile utilizzare il vecchio pacchetto org.apache.hadoop.mapred
o il nuovo pacchetto org.apache.hadoop.mapreduce
per Mapper e riduttori, Lavori ... Il primo era stato contrassegnato come deprecato, ma nel frattempo è stato ripristinato. Ora mi chiedo se sia meglio usare il vecchio pacchetto mapred o il nuovo pacchetto mapreduce per creare un lavoro e perché. O dipende solo dal fatto che tu abbia bisogno di cose come il MultipleTextOutputFormat che è disponibile solo nel vecchio pacchetto mapred?È meglio usare il pacchetto mapred o mapreduce per creare un lavoro Hadoop?
risposta
Funzionalità saggia non c'è molta differenza tra la vecchia (o.a.h.mapred
) e la nuova API (o.a.h.mapreduce
). L'unica differenza significativa è che i record vengono trasferiti al mapper/riduttore nella vecchia API. Mentre la nuova API supporta entrambi i meccanismi pull/push. È possibile ottenere ulteriori informazioni sul meccanismo di trazione here.
Inoltre, la vecchia API è stata un-deprecated da 0,21. Puoi trovare ulteriori informazioni sulla nuova API here.
Come hai menzionato alcune delle classi (come MultipleTextOutputFormat) non sono state migrate alla nuova API, a causa di questo e del motivo sopra menzionato è meglio attenersi alla vecchia API (anche se una traduzione è in genere abbastanza semplice).
C'è un motivo per cui i javadoc non ne menzionano nulla? – cmcginty
[Hadoop - The Definitive Guide] (http://shop.oreilly.com/product/0636920021773.do) ha la maggior parte del codice nella nuova API. –
Come nota a margine - MRUnit utilizza la nuova API, .mapreduce. Quindi se stai usando .mapred nel tuo codice, genererà errori. E tu non sarai felice. – wmute
Sia la vecchia che la nuova API sono buone. La nuova API è però più pulita. Utilizza la nuova API ovunque tu sia e utilizza la vecchia ovunque ti servano classi specifiche che non sono presenti nella nuova API (come MultipleTextOutputFormat
)
Ma fai attenzione a non utilizzare un mix di API vecchie e nuove in lo stesso lavoro di Mapreduce. Ciò porta a strani problemi.
Vecchio API (mapred)
esiste nel pacchetto org.apache.hadoop.mapred
fornire una mappa/ridurre configurazione del processo.
- Riduce i valori per una determinata chiave, sulla base del Iterator
- pacchetto Summary
Nuova API (MapReduce)
esiste nella confezione org.apache.hadoop.mapreduce
La configurazione del lavoro viene eseguita da una classe separata, chiamato JobConf che è exte nsion di configurazione
ClasseRiduce i valori per una determinata chiave, sulla base del Iterable
'ma questo meanwhile' ma ho ritornati siete sicuri? –
Es. Interface Mapper nel pacchetto org.apache.hadoop.mapred.lib in r0.21.0 non è contrassegnato come deprecato mentre è contrassegnato come deprecato in r0.20.2. – momo13