2011-04-28 74 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

相關問題