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

이 문제를 해결했습니다. 당신의 도움을 주셔서 감사합니다.

1

이 작업을 수행 :

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

그래서 당신이 값이 "SERVERURL"... 무의미에 파일 시스템을 설정하고 있습니다.

코드에서 해당 행을 제거 할 때 작동한다고 확신합니다.

HTH 그것은 conf.set("mapred.job.tracker", "server:9001"); 보인다

+1

나는 그것을 serverurl로 설정하지 않으며 hdfs url로 설정하고있다. 예 : hdfs : // server : 9000 /. 혼란을 드려 죄송합니다. 질문도 업데이트되었습니다. – nabeelmukhtar

+0

아직도; 해당 행을 제거하십시오. 작업을 클러스터에 제출하면 클러스터는 파일 시스템에 도달하는 방법을 알아야합니다. –

+0

예. 하지만 원격 클러스터에서 실행 중입니다. 즉, 작업 실행 코드가 클러스터에서 실행되지 않습니다. 따라서 작업은 클러스터의 위치를 ​​알아야합니다. – nabeelmukhtar

관련 문제