the spark programming name for developing based applications hadoop mapreduce combiners

programming - hadoop vs spark



Sobre qué base el framework mapreduce decide si lanzar un combinador o no (3)

Simplemente la cantidad de derrames en el disco. La clasificación se realiza después de que MapOutputBuffer completado, al mismo tiempo que se llevará a cabo la combinación.

Puede ajustar la cantidad de derrames en el disco con los parámetros io.sort.mb , io.sort.spill.percent , io.sort.record.percent , que también se explican en la documentación (libros y recursos en línea).

Ejemplo para números específicos de ejecuciones combinadas:

0 -> no se definió combinador

1 -> se definió un combinador y el MapOutputBuffer se llenó una vez

> 1 -> se definió un combinador y el MapOutputBuffer se llenó más de una vez

Tenga en cuenta que incluso si el MapOutputBuffer nunca se llena por completo, este búfer se debe descargar al final de la etapa del mapa y, por lo tanto, activa el combinador para que se ejecute al menos una vez (si está definido).

Según la definición "El combinador puede llamarse 0, 1 o muchas veces en cada tecla entre el mapeador y el reductor".

Quiero saber sobre qué base el framework mapreduce decide cuántas veces se lanzará el cobiner.


En primer lugar, la respuesta de Thomas Jungblut es genial y me dio un voto favorable. Lo único que quiero agregar es que el Combiner siempre se ejecutará al menos una vez por Mapper si está definido, a menos que la salida del asignador esté vacía o sea un par único. Por lo tanto, es posible que no se ejecute el combinador en el mapeador, pero es muy poco probable.


Código fuente que tiene lógica para invocar el combinador según la condición.

Línea 1950 - Línea 1955 https://github.com/apache/hadoop/blob/0b8a7c18ddbe73b356b3c9baf4460659ccaee095/hadoop-mapreduce-project/hadoop-mapreduce-client/hadoop-mapreduce-client-core/src/main/java/org/apache /hadoop/mapred/MapTask.java

if (combinerRunner == null || numSpills < minSpillsForCombine) { Merger.writeFile(kvIter, writer, reporter, job); } else { combineCollector.setWriter(writer); combinerRunner.combine(kvIter, combineCollector); }

Así que Combiner se ejecuta si:

No está definido, y si los derrames son mayores que minSpillsForCombine. minSpillForCombine es manejado por la propiedad "mapreduce.map.combine.minspills" cuyo valor predeterminado es 3.