我使用多文本输出格式来创建一个文件的多个文件,即新文件上的每一行。
这是我的密码:
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)
我也尝试过这个教程,但是当输入文件很大时,这个教程会毫无例外地返回空的输出目录,但是对于小的输入文件,这个教程也可以很好地工作。
注意:我使用的是单节点集群
暂无答案!
目前还没有任何答案,快来回答吧!