java - 为什么Hadoop FTPFileSystem.listStatus(Path path)不起作用?

标签 java hadoop ftp hdfs

我想将文件从FTP服务器传输到HDFS。我尝试了这种方法:FTP to HDFS,演示代码如下:

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);
ftpfs.listStatus(new Path("/"))不起作用,什么也不显示,但是FTP服务器有两个目录,ftpfs.mkdirs(new Path("test"))可以正常工作,程序运行结果如下:
enter image description here
FTP服务器目录如下:
enter image description here
我在Google中搜索,但发现了一些信息。我不知道为什么如果您能帮助我,我将非常感谢,谢谢

最佳答案

如您所知,问题是因为Hadoop(或更确切地说是基础的Apache Common Net FtpClient)默认为FTP Activity 模式,由于存在大量的NAT和防火墙,如今该模式几乎无法工作。
从Hadoop 2.9开始,您可以通过将 fs.ftp.data.connection.mode configuration option设置为启用FTP被动模式来设置FTP被动模式:

fs.ftp.data.connection.mode=PASSIVE_LOCAL_DATA_CONNECTION_MODE
参见https://issues.apache.org/jira/browse/HADOOP-13953

关于java - 为什么Hadoop FTPFileSystem.listStatus(Path path)不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46745419/

相关文章:

hadoop - HDFS FileSplit位置

hadoop - 如何正确设置hadoop block 大小?

python-3.x - 错误 : Python3. 4 -> java.lang.RuntimeException : PipeMapRed. waitOutputThreads():子进程失败,代码为 1

C# 嵌入式 FTP 服务器

java - 使用 pom.xml 中的参数切换 selenium 测试环境 + 使用 mvn 命令行参数

java - 错误 : Could not create the Java Virtual Machine

java - Lucene:获取类别的最新文档

java - Java 中使用自定义对象的属性(字段)快速搜索自定义对象的数据结构

javascript - 在合作伙伴网站上添加 JavaScript 以在不知道客户 FTP 凭据的情况下提供客户聊天支持和销售跟踪?

batch-file - 使用 ftp 批处理脚本删除 FTP 文件夹中的所有文件