2011-11-23 14 views
14

Estoy usando nueva Hadoop API y estoy buscando una forma de pasar algunos parámetros (algunas cadenas) a los mapeadores.
¿Cómo puedo hacer eso?Pasando argumentos a los trazadores de Hadoop

This solutions works for old API:

JobConf job = (JobConf)getConf(); 
job.set("NumberOfDocuments", args[0]); 

Aquí, “NumberOfDocuments” es el nombre del parámetro y su valor se lee de “args[0]“, un argumento de línea de comandos. Una vez que se establece este argumento, puede recuperar su valor en el reductor o el asignador de la siguiente manera:

private static Long N; 
public void configure(JobConf job) { 
    N = Long.parseLong(job.get("NumberOfDocuments")); 
} 

Nota, la parte difícil es que no se puede establecer parámetros como este:

Configuration con = new Configuration(); 
con.set("NumberOfDocuments", args[0]); 
+0

los nuevos y viejos métodos son aquí: http://www.thecloudavenue.com/2011/11/passing-parameters-to- mappers-and.html – weefwefwqg3

Respuesta

38

En el método main configure el parámetro requerido de la siguiente manera o usando el -D command line option mientras ejecuta el trabajo.

Configuration conf = new Configuration(); 
conf.set("test", "123"); 

Job job = new Job(conf); 

En el asignador/reductor de obtener el parámetro como

Configuration conf = context.getConfiguration(); 
String param = conf.get("test"); 
+0

y si queremos pasar un parámetro entero al asignador? – MTT

+0

VTT - el objeto de configuración tiene setters seguros para el tipo: setBoolean/setDouble/setEnum/etc ... también hay getters correspondientes. –

+1

Estoy tratando de establecer una matriz pero no puedo ¿hay otra forma en que pueda hacer esto? – tosi

Cuestiones relacionadas