Tengo dos clases separadas de java para hacer dos trabajos de mapreduce diferentes. Puedo ejecutarlos de forma independiente. Los archivos de entrada en los que están operando son los mismos para ambos trabajos. Así que mi pregunta es si es posible definir dos creadores de mapas y dos reductores en una clase Java comoHadoop MapReduce: ¿es posible definir dos mapeadores y reductores en una clase de trabajo de hadoop?
mapper1.class
mapper2.class
reducer1.class
reducer2.class
y luego como
job.setMapperClass(mapper1.class);
job.setmapperClass(mapper2.class);
job.setCombinerClass(reducer1);
job.setCombinerClass(reducer2);
job.setReducerClass(reducer1);
job.setReducerClass(reducer2);
hacer este conjunto Métodos realidad no usar los anteriores o añadir el nuevo unos? Probé el código, pero ejecuta las únicas últimas clases dadas, lo que me hace pensar que anula. Pero debe haber una forma de hacerlo bien?
La razón por la que estoy preguntando esto es que puedo leer los archivos de entrada solo una vez (una E/S) y luego procesar dos trabajos de reducción de mapas. También me gustaría saber cómo puedo escribir los archivos de salida en dos carpetas diferentes. Por el momento, ambos trabajos están separados y requieren una entrada y un directorio de salida.
+1 Esto tiene sentido. – pyfunc
@Chris Ambos pares de MR comparten la misma entrada, lo que me hizo pensar en poder leer la entrada solo una vez. Los mapeadores trabajan con diferentes claves. Esto significa que las claves para un mapeador serán diferentes de las del mapeador. La razón por la que estoy pensando es que puedo leer los archivos de entrada solo una vez para procesarlos en dos pares diferentes de MR que funcionan de forma independiente. – Bob