2017-10-14 11 views
0

Je veux transférer le fichier du serveur ftp vers hdfs. J'ai essayé cette méthode: FTP TO HDFS, le code de démonstration comme suit:Pourquoi Hadoop FTPFileSystem.listStatus (chemin d'accès) ne fonctionne pas?

Configuration conf = new Configuration(); 
    FTPFileSystem ftpfs = new FTPFileSystem(); 
    ftpfs.setConf(conf); 
    ftpfs.initialize(new URI(ftpConnectStr), conf); 

    Path homeDirectory = ftpfs.getHomeDirectory(); 
    System.out.println(homeDirectory.toString()); 

    FileStatus[] fileStatuses = ftpfs.listStatus(new Path("/")); 
    for(FileStatus fileStatus : fileStatuses){ 
     System.out.println(fileStatuses.length); 
     System.out.println(fileStatus.toString()); 
    } 

    boolean test = ftpfs.mkdirs(new Path("test")); 
    System.out.println(test); 

le ftpfs.listStatus(new Path("/")) ne fonctionne pas, il ne montre rien, mais le serveur ftp a deux répertoires et ftpfs.mkdirs(new Path("test")) fonctionnent bien, le résultat en cours d'exécution programme comme suit:

enter image description here

et le serveur ftp dirctory comme suit:

enter image description here

J'ai cherché sur google, mais je trouve un peu d'information. Je ne sais pas pourquoi. Si vous pouvez m'aider, je serai très reconnaissant, merci

+1

@MartinPrikryl https://hadoop.apache.org/docs/r2.4.1/api/org/apache/hadoop/fs/ftp/FTPFileSystem.html#listStatus(org.apache.hadoop.fs. Chemin) – Smittey

+0

Pouvez-vous nous montrer un fichier journal Hadoop? –

+0

Quelles sont les autorisations de fichiers sur les fichiers dans le dossier ftp? Le processus exécutant votre logiciel peut-il les voir? A-t-il les bonnes permissions? Donnez-lui un test rapide en mettant un fichier fictif là avec chmod 777 ou quelque chose à confirmer – Smittey

Répondre

0

Enfin, j'ai trouvé le problème où il est; Dans FTP Server, le mode de transfert de données est défini sur passif.

enter image description here

Je debuged le code source de FTPFileSystem, et je trouve qu'il n'a pas défini le mode FTP passif;

enter image description here

, je modifie le code correspondant de FTPFileSystem à ceci:

enter image description here

Relancez le programme:

enter image description here

et il fonctionne très bien:

enter image description here