2012-05-10 5 views
1

J'utilise hadoop avec 0 Réduit. L'objectif est de créer un objet de manière incrémentielle dans la méthode map. Ensuite, à un moment donné, écrivez (sérialiser) dans le dossier de sortie. Comme je l'ai dit, la pièce reduce ne fera rien ici. Comment puis-je faire cela? Voilà ce que j'ai:hadoop Fichiers de tâches latérales

Dans la méthode de configuration que je reçois le chemin du fichier:

@Override 
public void configure(JobConf conf) {  
    taskSideEffectFile = FileOutputFormat.getWorkOutputPath(conf) + "/temp";  
} 

Dans la méthode carte Je construis mon objet et, finalement, je voudrais sérialiser, pour l'instant Je suis en train de l'écrire toujours la méthode de carte:

@Override 
public void map(LongWritable key, Text value, 
    OutputCollector<Text, IntWritable> output, Reporter reporter) 
    throws IOException {   

    AddInstanceToClassifier(value.toString()); 

    try 
    {    
    //serialize classifier 
    weka.core.SerializationHelper.write(taskSideEffectFile, nb); 

    } 
    catch (Exception ex) 
    { 
    System.err.println("Failed to serialize classifier: " + ex.getMessage()); 
    throw new IOException("taskSideEffectFile: " + ex.getMessage()); 

    } 

} 

C'est l'erreur que je reçois:

12/05/09 22:47:00 INFO mapred.JobClient: map 0% reduce 0% 
12/05/09 22:47:08 INFO mapred.JobClient: Task Id : attempt_201205091117_0015_m_000001_0, Status : FAILED 
java.io.IOException: taskSideEffectFile: hdfs:/192.168.78.129:9000/user/hadoop-user/output/_temporary/_attempt_201205091117_0015_m_000001_0/temp (No such file or directory) 
    at naive.bayes.hadoop.MusicClassifierMapper.SaveClassifier(MusicClassifierMapper.java:168) 
    at naive.bayes.hadoop.MusicClassifierMapper.map(MusicClassifierMapper.java:121) 
    at naive.bayes.hadoop.MusicClassifierMapper.map(MusicClassifierMapper.java:1) 
    at org.apache.hadoop.mapred.MapRunner.run(MapRunner.java:47) 
    at org.apache.hadoop.mapred.MapTask.run(MapTask.java:227) 
    at org.apache.hadoop.mapred.TaskTracker$Child.main(TaskTracker.java:2209) 

Remarque: J'utilise Hadoop 0.18.0 Yahoo (j'ai vu ce que ma seule façon d'exécuter les applications de l'éclipse)

Répondre

1

Hadoop est censé stocker vos fichiers temporaires, puis les « promouvoir » au dossier de sortie lorsque la tâche réussit.

Voici comment le réparer

  • Ne pas utiliser le chemin de température plus.
  • Alors maintenant, écrivez le code pour le mettre sur un dossier dans HDFS que vous avez créé
Questions connexes