远程执行hadoop作业时出现异常

时间:2011-04-28 08:03:42

标签: hadoop mapreduce hdfs

我正在尝试在远程hadoop集群上执行Hadoop作业。以下是我的代码。

Configuration conf = new Configuration();
conf.set("fs.default.name", "hdfs://server:9000/");
conf.set("hadoop.job.ugi", "username");

Job job = new Job(conf, "Percentil Ranking");
job.setJarByClass(PercentileDriver.class);
job.setMapperClass(PercentileMapper.class);
job.setReducerClass(PercentileReducer.class);
job.setMapOutputKeyClass(TestKey.class);
job.setMapOutputValueClass(TestData.class);
job.setOutputKeyClass(TestKey.class);
job.setOutputValueClass(BaselineData.class);

job.setOutputFormatClass(SequenceFileOutputFormat.class);

FileInputFormat.addInputPath(job, new Path(inputPath));

FileOutputFormat.setOutputPath(job, new Path(outputPath));

job.waitForCompletion(true);

当作业立即开始执行时,甚至在映射阶段之前都会抛出异常。

java.io.IOException: Filesystem closed
at org.apache.hadoop.hdfs.DFSClient.checkOpen(DFSClient.java:226)
at org.apache.hadoop.hdfs.DFSClient.getFileInfo(DFSClient.java:617)
at org.apache.hadoop.hdfs.DistributedFileSystem.getFileStatus(DistributedFileSystem.java:453)
at org.apache.hadoop.fs.FileUtil.copy(FileUtil.java:192)
at org.apache.hadoop.fs.FileUtil.copy(FileUtil.java:142)
at org.apache.hadoop.fs.FileSystem.copyToLocalFile(FileSystem.java:1216)
at org.apache.hadoop.fs.FileSystem.copyToLocalFile(FileSystem.java:1197)
at org.apache.hadoop.mapred.LocalJobRunner$Job.<init>(LocalJobRunner.java:92)
at org.apache.hadoop.mapred.LocalJobRunner.submitJob(LocalJobRunner.java:373)
at org.apache.hadoop.mapred.JobClient.submitJobInternal(JobClient.java:800)
at org.apache.hadoop.mapreduce.Job.submit(Job.java:432)
at org.apache.hadoop.mapreduce.Job.waitForCompletion(Job.java:447)

输入文件确实存在,并且是逗号分隔的文本文件。我能够使用具有相同输入和输出的hadoop jar命令在hadoop集群上执行作业。但我不能远程运行它。我也可以远程运行其他工作。

谁能告诉我这个问题的解决方案是什么?

2 个答案:

答案 0 :(得分:2)

似乎conf.set("mapred.job.tracker", "server:9001");解决了这个问题。谢谢你的帮助。

答案 1 :(得分:1)

你这样做:

conf.set("fs.default.name", "serverurl");

因此,您将文件系统设置为值“serverurl”...这是没有意义的。

我很确定只需从代码中删除该行即可。

HTH