원격 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 : // server : 9000 /. 혼란을 드려 죄송합니다. 질문도 업데이트되었습니다. – nabeelmukhtar
아직도; 해당 행을 제거하십시오. 작업을 클러스터에 제출하면 클러스터는 파일 시스템에 도달하는 방법을 알아야합니다. –
예. 하지만 원격 클러스터에서 실행 중입니다. 즉, 작업 실행 코드가 클러스터에서 실행되지 않습니다. 따라서 작업은 클러스터의 위치를 알아야합니다. – nabeelmukhtar