2011-09-29 10 views
43

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?

+0

'ma questo meanwhile' ma ho ritornati siete sicuri? –

+5

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

risposta

39

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).

+4

C'è un motivo per cui i javadoc non ne menzionano nulla? – cmcginty

+3

[Hadoop - The Definitive Guide] (http://shop.oreilly.com/product/0636920021773.do) ha la maggior parte del codice nella nuova API. –

+3

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

14

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.

2

Vecchio API (mapred)

  1. esiste nel pacchetto org.apache.hadoop.mapred

  2. fornire una mappa/ridurre configurazione del processo.

  3. Riduce i valori per una determinata chiave, sulla base del Iterator
  4. pacchetto Summary

Nuova API (MapReduce)

  1. esiste nella confezione org.apache.hadoop.mapreduce

  2. La configurazione del lavoro viene eseguita da una classe separata, chiamato JobConf che è exte nsion di configurazione
    Classe

  3. Riduce i valori per una determinata chiave, sulla base del Iterable

  4. Package Summary

+0

org.apache.hadoop.mapred è l'API più vecchia e org.apache.hadoop.mapreduce è la nuova. Potresti voler cambiare la tua risposta – Harinder

+0

@Dennis ha aggiornato la risposta – anish

+3

Inoltre, JobConf fa parte dell'API mappata, non l'API mapreduce – ryanbwork

Problemi correlati