2010-06-17 7 views
3

J'ai besoin de diviser mon fichier jar Map Reduce en deux tâches afin d'obtenir deux fichiers de sortie différents, un de chaque réducteur des deux travaux.Carte Réduire: ChainMapper et ChainReducer

Je veux dire que le premier travail doit produire un fichier de sortie qui sera l'entrée pour le deuxième travail en chaîne. J'ai lu quelque chose à propos de ChainMapper et ChainReducer dans hadoop version 0.20 (actuellement j'utilise 0.18): ceux qui pourraient être bon pour mes besoins?

Quelqu'un peut-il me suggérer quelques liens où trouver des exemples afin d'utiliser ces méthodes? Ou peut-être existe-t-il un autre moyen d'atteindre mon problème?

Merci,

Luca

Répondre

10

Il y a plusieurs façons que vous pouvez le faire.

  1. emploi Cascading

    Créer l'objet JobConf « job1 » pour le premier emploi et régler tous les paramètres avec « entrée » comme inputDirectory et « temp » comme répertoire de sortie. Exécutez ce travail: JobClient.run(job1). Créez immédiatement l'objet JobConf "job2" pour le deuxième travail et définissez tous les paramètres avec "temp" comme répertoire d'entrée et "output" comme répertoire de sortie. Exécuter ce travail: JobClient.run(job2).

  2. Deux objets JobConf

    Créer deux objets JobConf et régler tous les paramètres en eux comme (1), sauf que vous ne l'utilisez pas JobClient.run.

    Ensuite, créez deux objets Job avec jobconfs comme paramètres:

    Job job1=new Job(jobconf1); Job job2=new Job(jobconf2);

    Utilisation de l'objet JobControl, vous spécifiez les dépendances d'emploi puis exécuter les travaux:

    JobControl jbcntrl=new JobControl("jbcntrl"); 
    jbcntrl.addJob(job1); 
    jbcntrl.addJob(job2); 
    job2.addDependingJob(job1); 
    jbcntrl.run(); 
    
  3. ChainMapper et ChainReducer

    Si vous avez besoin d'une structure comme Map + | Réduire | Map *, vous pouvez utiliser les classes ChainMapper et ChainReducer fournies avec Hadoop version 0.19 et suivantes. Notez que dans ce cas, vous ne pouvez utiliser qu'un seul réducteur mais un nombre quelconque de mappeurs avant ou après.

0

Je pense que la solution ci-dessus implique une opération d'E/S disque, donc ralentira avec de grands ensembles de données. Une alternative est d'utiliser Oozie ou en cascade.

Questions connexes