2011-09-29 12 views
43

Para crear trabajos de MapReduce puede usar el paquete org.apache.hadoop.mapred antiguo o el paquete org.apache.hadoop.mapreduce más reciente para Mappers y Reductores, Trabajos ... El primero se marcó como obsoleto, pero esto se revirtió mientras tanto. Ahora me pregunto si es mejor usar el viejo paquete mapred o el nuevo paquete mapreduce para crear un trabajo y por qué. ¿O solo depende de si necesita cosas como MultipleTextOutputFormat, que solo está disponible en el paquete mapred anterior?¿Es mejor usar el paquete mapred o mapreduce para crear un trabajo de Hadoop?

+0

'pero esta meanwhile' consiguió revertidas ¿está seguro? –

+5

P. ej. Interface Mapper en el paquete org.apache.hadoop.mapred.lib en r0.21.0 no está marcado como obsoleto mientras está marcado como obsoleto en r0.20.2. – momo13

Respuesta

39

Funcionalidad sabia que no hay mucha diferencia entre el antiguo (o.a.h.mapred) y el nuevo (o.a.h.mapreduce) API. La única diferencia significativa es que los registros se envían al asignador/reductor en la antigua API. Mientras que la nueva API admite ambos mecanismos de extracción/extracción. Puede obtener más información sobre el mecanismo de extracción here.

Además, la antigua API ha sido un-deprecated desde 0.21. Puede encontrar más información sobre la nueva API here.

Como mencionó algunas de las clases (como MultipleTextOutputFormat) no se han migrado a la nueva API, debido a esto y al motivo mencionado anteriormente, es mejor seguir con la API anterior (aunque una traducción suele ser bastante simple).

+4

¿Hay alguna razón por la cual los javadocs no mencionan nada de esto? – cmcginty

+3

[Hadoop - La guía definitiva] (http://shop.oreilly.com/product/0636920021773.do) tiene la mayor parte del código en la nueva API. –

+3

Como nota al margen: MRUnit usa la nueva API, .mapreduce. Entonces, si estás usando .mapred en tu código, lanzará errores. Y no vas a ser feliz. – wmute

14

Tanto la API anterior como la nueva son buenas. La nueva API es más limpia. Use la nueva API siempre que pueda y use la antigua donde necesite clases específicas que no estén presentes en la nueva API (como MultipleTextOutputFormat)

Pero tenga cuidado de no usar una combinación de las API antiguas y nuevas en el mismo trabajo de Mapreduce. Eso lleva a problemas extraños.

2

API Viejo (mapred)

  1. existe en paquete org.apache.hadoop.mapred

  2. proporcionar un mapa/reducir la configuración de la tarea.

  3. Reduce los valores de una clave determinada, basado en el iterador
  4. paquete Summary

Nueva API (mapreduce)

  1. Existe en paquete org.apache.hadoop.mapreduce

  2. La configuración del trabajo se realiza por clase separada, llamada JobConf que es exte nsion de configuración
    Clase

  3. Reduce los valores de una clave determinada, en base a la Iterable

  4. Package Summary

+0

org.apache.hadoop.mapred es la API anterior y org.apache.hadoop.mapreduce es la nueva. Es posible que desee cambiar su respuesta – Harinder

+0

@Dennis actualizó la respuesta – anish

+3

Además, JobConf es parte de la API mapreduce, no la API de mapreduce – ryanbwork

Cuestiones relacionadas