Comment puis-je désactiver l'exécution spéculative hadoop à partir de Java


Après avoir lu Hadoop speculative task execution J'essaie de désactiver l'exécution spéculative en utilisant la nouvelle api Java, mais cela n'a aucun effet.

C'est ma classe Principale:

public class Main {

  public static void main(String[] args) throws Exception {
    Configuration conf = new Configuration();

    //old api:
    //conf.setBoolean("mapred.map.tasks.speculative.execution", false);
    //new api:
    conf.setBoolean("mapreduce.map.speculative", false);

    int res = ToolRunner.run(conf, new LogParserMapReduce(), args);
    System.exit(res);
  }
}

Et mon MapReducer commence comme ceci:

@Override
public int run(String[] args) throws Exception {
    Configuration conf = super.getConf();

    /*
     * Instantiate a Job object for your job's configuration.  
     */
    Job job = Job.getInstance(conf);

Mais quand je regarde les journaux, je vois:

2014-04-24 10:06:21,418 INFO org.apache.hadoop.mapreduce.lib.input.FileInputFormat (main): Total input paths to process : 16
2014-04-24 10:06:21,574 INFO org.apache.hadoop.mapreduce.JobSubmitter (main): number of splits:26

Si je comprends bien, cela signifie que l'exécution spéculative est toujours activée, sinon pourquoi y aurait-il 26 divisions si je n'ai que 16 fichiers d'entrée. Suis-je trompé?

Remarque: J' croyez que j'utilise la nouvelle API, car je vois ces avertissements dans le journal:

2014-04-24 10:06:21,590 INFO org.apache.hadoop.conf.Configuration.deprecation (main): mapred.job.classpath.files is deprecated. Instead, use mapreduce.job.classpath.files
Author: Community, 2014-04-24

2 answers

"16 file = 16 Mappeurs" c'est une mauvaise hypothèse.

"16 Fichiers = 16 Mappeurs minimum" C'est correct.

Si certains des 16 fichiers sont plus grands que la taille du bloc, ils sont divisés en plusieurs mappeurs. Par conséquent, vos 16 fichiers générant 26 mappeurs peuvent ne pas être dus à une exécution spéculative.

Définir la valeur dans Conf fonctionne certainement. Vous pouvez vérifier en vérifiant votre travail.xml

 2
Author: Venkat, 2014-04-24 12:10:39

Votre paramètre 'pas d'exécution spéculative pour les tâches de carte' est correct. Une autre façon de le définir runtime (qui facilite l'expérimentation/le test) consiste à passer l'argument correspondant(-s) dans la ligne de commande. Ainsi, par exemple, ci-dessous l'exécution spéculative pour les cartes définies sur off mais est activée pour les réducteurs:

bin/hadoop jar -Dmapreduce.map.speculative=false \
               -Dmapreduce.reduce.speculative=true <jar>
 0
Author: Denis, 2017-03-01 13:13:36