Ajuste el Número de Reductores en un trabajo MapReduce que está en un Flujo de trabajo de Oozie

Tengo un cinco nodo de clúster, tres nodos de los cuales contienen DataNodes y TaskTrackers.

He importado alrededor de 10million filas de Oracle a través de Sqoop y el proceso a través de MapReduce en un Oozie flujo de trabajo.

La MapReduce trabajo dura aproximadamente 30 minutos y es sólo el uso de un reductor de velocidad.

Editar – Si ejecuto la MapReduce código en su propia, independiente de la de Oozie, el job.setNumReduceTasks(4) correctamente establece 4 reductores.

He probado los métodos siguientes para configurar manualmente el número de reductores de a cuatro, sin éxito:

De Oozie, establezca las siguientes propiedades de la etiqueta del mapa reducir nodo:

<property><name>mapred.reduce.tasks</name><value>4</value></property>

En la MapReduce java de código del método Main:

Configuration conf = new Configuration();
Job job = new Job(conf, "10 million rows");
...
job.setNumReduceTasks(4);

También probé:

Configuration conf = new Configuration();
Job job = new Job(conf, "10 million rows");
...
conf.set("mapred.reduce.tasks", "4");

Mi función de mapa de aspecto similar a este:

public void map(Text key, Text value, Context context) {
    CustomObj customObj = new CustomObj(key.toString());
    context.write(new Text(customObj.getId()), customObj);  
}

Creo que hay algo como de 80.000 diferentes valores para el ID.

Mis Reducir función similar a esto:

public void reduce(Text key, Iterable<CustomObj> vals, Context context) {
    OtherCustomObj otherCustomObj = new OtherCustomObj();
    ...
    context.write(null, otherCustomObj);
}

El objeto personalizado que se emite en el Asignador implementa WritableComparable, pero el otro personalizada opuso emitida en el Reductor de no implementar WritableComparable.

Aquí están los registros con respecto a los contadores del Sistema, el trabajo de los contadores, y reducir el mapa marco, donde se especifica que sólo se reducen tarea fue lanzado.

 map 100% reduce 100%
 Job complete: job_201401131546_0425
 Counters: 32
   File System Counters
     FILE: Number of bytes read=1370377216
     FILE: Number of bytes written=2057213222
     FILE: Number of read operations=0
     FILE: Number of large read operations=0
     FILE: Number of write operations=0
     HDFS: Number of bytes read=556345690
     HDFS: Number of bytes written=166938092
     HDFS: Number of read operations=18
     HDFS: Number of large read operations=0
     HDFS: Number of write operations=1
   Job Counters 
     Launched map tasks=11
     Launched reduce tasks=1
     Data-local map tasks=11
     Total time spent by all maps in occupied slots (ms)=1268296
     Total time spent by all reduces in occupied slots (ms)=709774
     Total time spent by all maps waiting after reserving slots (ms)=0
     Total time spent by all reduces waiting after reserving slots (ms)=0
   Map-Reduce Framework
     Map input records=9440000
     Map output records=9440000
     Map output bytes=666308476
     Input split bytes=1422
     Combine input records=0
     Combine output records=0
     Reduce input groups=80000
     Reduce shuffle bytes=685188530
     Reduce input records=9440000
     Reduce output records=2612760
     Spilled Records=28320000
     CPU time spent (ms)=1849500
     Physical memory (bytes) snapshot=3581157376
     Virtual memory (bytes) snapshot=15008251904
     Total committed heap usage (bytes)=2848063488

Edit: he modificado el MapReduce para introducir una costumbre particionador, una especie de comparación, y una agrupación de comparación. Por alguna razón, el código ahora lanza dos reductores (cuando se programa a través de Oozie), pero no cuatro.

Me puse el mapred.tasktracker.map.tasks.maximum propiedad a 20 en cada TaskTracker (y JobTracker), reinicia ellos, pero el resultado no.

  • establecer manualmente personalizado particionador a 4, en la aplicación del método de separar de IDENTIFICACIÓN basado en alguna condición en 4 partes. Esto es solo para probar si 4 particiones/reductores están ejecutando.
  • cuál es la versión de Hadoop está utilizando ? Compruebe que la propiedad que usted está utilizando para el ajuste del reductor es válido para esa versión o no

1 Kommentar

  1. 0

    Sólo como un punto de partida ¿cuál es el valor de la siguiente propiedad en el mapred-site.xml

    <property>
        <name>mapred.tasktracker.map.tasks.maximum</name>
        <value>4</value>
    </property>
    
    • Mi mapred-site.xml en cada nodo en mi clúster no está configurado.
    • entonces es más probable que sea tener 2 o 1 reductor (dependiendo del defecto # reductores para esa versión). Considere la posibilidad de usar rsync para empujar a cabo una mapred-site.xml a los nodos esclavos
    • Antes bien he seguido tus instrucciones, he probado el SEÑOR código por sí mismo y era capaz de lanzar 4 reductores. A continuación, he añadido una costumbre particionador, tipo de comparación, y una agrupación de comparador para mi MapReduce código, y programado a través de Oozie, que logró aumentar el número de reductores para 2. Finalmente he seguido tus instrucciones, sincronizándose y verificando que cada TaskTracker (y JobTracker) había un mapred.tasktracker.map.tasks.maximum de 20, pero el oozie flujo de trabajo todavía sólo lanza dos reductores.
    • Parece agregó el ajuste correcto para oozie ya, así que en este punto no tengo sugerencias adicionales.
    • Puede publicar su costumbre particionador de código?

Kommentieren Sie den Artikel

Bitte geben Sie Ihren Kommentar ein!
Bitte geben Sie hier Ihren Namen ein

Pruebas en línea