2012-12-06 3 views
1

mapreduce 코드를 사용하여 FTP 서버에서 데이터를 읽는 코드가 있습니다.FileInputFormat.setInputPath의 FTP 파일 이름

String inputPath = args[0]; 
    String outputPath = args[1]; 

    Configuration conf1 = new Configuration(); 
    String[] otherArgs = new GenericOptionsParser(conf1, args).getRemainingArgs(); 

    Path arg = new Path(inputPath); 
    FTPFileSystem ftpfs = new FTPFileSystem(); 
    Path arg1 =new Path(outputPath); 
    ftpfs.setConf(conf1); 
    String ftpUser = URLEncoder.encode("username", "UTF-8"); 
    String ftpPass = URLEncoder.encode("password", "UTF-8"); 

    String url = String.format("ftp://%s:%[email protected]", 
      ftpUser, ftpPass); 
    ftpfs.initialize(new URI(url), conf1); 

    JobConf conf = new JobConf(FTPIF.class); 
    FileOutputFormat.setOutputPath(conf, arg1));  
    FileInputFormat.setInputPaths(conf, ftpfs.makeQualified(arg)); 



     conf.setOutputKeyClass(Text.class); 
     conf.setOutputValueClass(NullWritable.class); 
     conf.setOutputFormat(TextOutputFormat.class); 

     conf.setInputFormat(CustomInputFormat.class); 
     conf.setMapperClass(CustomMap.class); 
     conf.setReducerClass(CustomReduce.class); 


    JobClient.runJob(conf); 

`

문제는이 코드는 의사 모드에서 완벽하게 잘 작동하지만, 클러스터에서 실행할 때 로그인 서버 오류에 실패 제공`우리는 다음과 같은 서버를 FTP로 연결하는 데 사용하는 코드입니다. 오류 스택 추적

ERROR security.UserGroupInformation: PriviledgedActionException as:username (auth:SIMPLE) cause:java.io.IOException: Login failed on server - 0.0.0.0, port - 21 Exception in thread "main" java.io.IOException: Login failed on server - 0.0.0.0, port - 21 at org.apache.hadoop.fs.ftp.FTPFileSystem.connect(FTPFileSystem.java:133) at org.apache.hadoop.fs.ftp.FTPFileSystem.getFileStatus(FTPFileSystem.java:389) at org.apache.hadoop.fs.FileSystem.getFileStatus(FileSystem.java:2106) at org.apache.hadoop.fs.FileSystem.globStatusInternal(FileSystem.java:1566) at org.apache.hadoop.fs.FileSystem.globStatus(FileSystem.java:1503) at org.apache.hadoop.mapred.FileInputFormat.listStatus(FileInputFormat.java:174) at org.apache.hadoop.mapred.FileInputFormat.getSplits(FileInputFormat.java:205) at org.apache.hadoop.mapred.JobClient.writeOldSplits(JobClient.java:1041) at org.apache.hadoop.mapred.JobClient.writeSplits(JobClient.java:1033) at org.apache.hadoop.mapred.JobClient.access$600(JobClient.java:172) at org.apache.hadoop.mapred.JobClient$2.run(JobClient.java:943) at org.apache.hadoop.mapred.JobClient$2.run(JobClient.java:896) at java.security.AccessController.doPrivileged(Native Method) at javax.security.auth.Subject.doAs(Subject.java:396) at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1332) at org.apache.hadoop.mapred.JobClient.submitJobInternal(JobClient.java:896) at org.apache.hadoop.mapred.JobClient.submitJob(JobClient.java:870) at org.apache.hadoop.mapred.JobClient.runJob(JobClient.java:1319) at FTPIF.run(FTPIF.java:164) at org.apache.hadoop.util.ToolRunner.run(ToolRunner.java:70) at org.apache.hadoop.util.ToolRunner.run(ToolRunner.java:84) at FTPIF.main(FTPIF.java:169) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:597) at org.apache.hadoop.util.RunJar.main(RunJar.java:208

클러스터에서 ftp로하는 연결되어 있습니다. 사용 된 자격 증명이 정확합니다. 코드가 ftp에 연결할 수없는 이유는 무엇입니까?

답변

1

클러스터에 노드가 여러 개 있고 여러 맵퍼가 FTP 서버에 대한 연결을 열려고하는 경우 FTP 서버에서 지원하는 FTP 사용자 수를 초과 할 수 있습니다.

+0

문제가 해결되었습니다. FTP 서버에 문제가 발생했습니다. – RadAl