gpt4 book ai didi

java - hadoop 任务副作用文件

转载 作者:可可西里 更新时间:2023-11-01 15:41:29 26 4
gpt4 key购买 nike

我正在使用具有 0 个 Reduce 的 hadoop。目标是在 map 方法中逐步创建一个对象。然后在某个时候将其写入(序列化)到输出文件夹。就像我说的那样,reduce 部分不会在这里做任何事情。我该怎么做呢?这是我的:

在配置方法中,我得到文件的路径:

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

在 map 方法中,我正在构建我的对象,最终我想序列化它,现在我试图始终在 map 方法上编写它:

@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());

}

}

这是我遇到的错误:

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)

注意:我正在使用 yahoo 的 hadoop-0.18.0(我认为这是我从 eclipse 运行应用程序的唯一方式)

最佳答案

Hadoop 应该存储您的临时文件,然后在任务成功时将它们“提升”到输出文件夹。

这里是你如何修复它

  • 不再使用临时路径。
  • 现在编写代码将其放在您创建的 HDFS 中的文件夹中

关于java - hadoop 任务副作用文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10527325/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com