2011-04-28 49 views
3

我试图在远程hadoop群集上执行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

看来conf.set("mapred.job.tracker", "server:9001");修复了这个问题。谢谢你的帮助。

1

你这样做:

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

所以要设置文件系统为值“SERVERURL” ......这是毫无意义的。

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

HTH

+1

我不把它设置为serverurl,我将它设置为hdfs url。例如HDFS://服务器:9000 /。对困惑感到抱歉。更新了问题。 – nabeelmukhtar 2011-04-28 12:17:06

+0

仍;尝试删除该行。您将作业提交给群集,群集应知道如何进入文件系统。 – 2011-04-28 12:29:55

+0

是的。但是我正在远程集群上执行。即作业执行代码不在群集上运行。所以工作应该知道集群的位置。 – nabeelmukhtar 2011-04-28 12:40:57

相关问题