工作失败异常hadoop

时间:2014-05-04 13:48:23

标签: java apache hadoop mapreduce cloudera

我使用多文本输出格式来创建单个文件的多个文件,即新文件中的每一行。

这是我的代码:

public class MOFExample extends Configured implements Tool {

private static double count = 0;

static class KeyBasedMultipleTextOutputFormat extends
        MultipleTextOutputFormat<Text, Text> {
    @Override
    protected String generateFileNameForKeyValue(Text key, Text value,
            String name) {
        return count++ + "_";// + name;
    }
}

/**
 * The main job driver.
 */
public int run(final String[] args) throws Exception {
    Path csvInputs = new Path(args[0]);
    Path outputDir = new Path(args[1]);

    JobConf jobConf = new JobConf(super.getConf());
    jobConf.setJarByClass(MOFExample.class);
    jobConf.setMapperClass(IdentityMapper.class);

    jobConf.setInputFormat(KeyValueTextInputFormat.class);
    jobConf.setOutputFormat(KeyBasedMultipleTextOutputFormat.class);
    jobConf.setOutputValueClass(Text.class);
    jobConf.setOutputKeyClass(Text.class);
    FileInputFormat.setInputPaths(jobConf, csvInputs);
    FileOutputFormat.setOutputPath(jobConf, outputDir);
    //jobConf.setNumMapTasks(4);
    jobConf.setNumReduceTasks(4);
    return JobClient.runJob(jobConf).isSuccessful() ? 0 : 1;
}

public static void main(final String[] args) throws Exception {
    int res = ToolRunner.run(new Configuration(), new MOFExample(), args);
    System.exit(res);
}
}

此代码在小文本文件上运行正常,但是当输入文件的行数大于1900但尚未成为大文件时,它会引发异常:

  

线程“main”中的异常java.io.IOException:作业失败!       在org.apache.hadoop.mapred.JobClient.runJob(JobClient.java:836)       在MOFExample.run(MOFExample.java:57)       在org.apache.hadoop.util.ToolRunner.run(ToolRunner.java:70)       在MOFExample.main(MOFExample.java:61)

我也尝试了this tutorial但是当输入文件很大时,这一个返回空输出目录而没有任何异常,但是这个也适用于小输入文件。

  

注意:我使用的是单节点群集

0 个答案:

没有答案