我試圖在遠程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集羣上的作業。但我無法遠程運行它。我也能夠遠程運行其他作業。
誰能告訴我這個問題的解決方案是什麼?
我不把它設置爲serverurl,我將它設置爲hdfs url。例如HDFS://服務器:9000 /。對困惑感到抱歉。更新了問題。 – nabeelmukhtar 2011-04-28 12:17:06
仍;嘗試刪除該行。您將作業提交給羣集,羣集應知道如何進入文件系統。 – 2011-04-28 12:29:55
是的。但是我正在遠程集羣上執行。即作業執行代碼不在羣集上運行。所以工作應該知道集羣的位置。 – nabeelmukhtar 2011-04-28 12:40:57