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)