scheme:sftp没有文件系统

q0qdq0h2  于 2021-06-02  发布在  Hadoop
关注(0)|答案(1)|浏览(569)

我正在尝试在hadoop中使用sftp和distcp,如下所示

hadoop distcp -D fs.sftp.credfile=/home/bigsql/cred.prop sftp://<<ip address>>:22/export/home/nz/samplefile hdfs:///user/bigsql/distcp

但是我得到了下面的错误

15/11/23 13:29:06 INFO tools.DistCp: Input Options: DistCpOptions{atomicCommit=false, syncFolder=false, deleteMissing=false, ignoreFailures=false, maxMaps=20, sslConfigurationFile='null', copyStrategy='uniformsize', sourceFileListing=null, sourcePaths=[sftp://<<source ip>>:22/export/home/nz/samplefile], targetPath=hdfs:/user/bigsql/distcp, targetPathExists=true, preserveRawXattrs=false}
15/11/23 13:29:09 INFO impl.TimelineClientImpl: Timeline service address: http://bigdata.ibm.com:8188/ws/v1/timeline/
15/11/23 13:29:09 INFO client.RMProxy: Connecting to ResourceManager at bigdata.ibm.com/<<target ip>>:8050
15/11/23 13:29:10 ERROR tools.DistCp: Exception encountered
java.io.IOException: No FileSystem for scheme: sftp
        at org.apache.hadoop.fs.FileSystem.getFileSystemClass(FileSystem.java:2584)
        at org.apache.hadoop.fs.FileSystem.createFileSystem(FileSystem.java:2591)
        at org.apache.hadoop.fs.FileSystem.access$200(FileSystem.java:91)
        at org.apache.hadoop.fs.FileSystem$Cache.getInternal(FileSystem.java:2630)
        at org.apache.hadoop.fs.FileSystem$Cache.get(FileSystem.java:2612)
        at org.apache.hadoop.fs.FileSystem.get(FileSystem.java:370)
        at org.apache.hadoop.fs.Path.getFileSystem(Path.java:296)
        at org.apache.hadoop.tools.GlobbedCopyListing.doBuildListing(GlobbedCopyListing.java:76)
        at org.apache.hadoop.tools.CopyListing.buildListing(CopyListing.java:84)
        at org.apache.hadoop.tools.DistCp.createInputFileListing(DistCp.java:353)
        at org.apache.hadoop.tools.DistCp.execute(DistCp.java:160)
        at org.apache.hadoop.tools.DistCp.run(DistCp.java:121)
        at org.apache.hadoop.util.ToolRunner.run(ToolRunner.java:70)
        at org.apache.hadoop.tools.DistCp.main(DistCp.java:401)

有人能提出问题的原因吗。

u0sqgete

u0sqgete1#

例外情况即将出现,因为hadoop无法找到该方案的文件系统实现: sftp .
异常发生在 FileSystem.java . 框架试图找到配置参数的值 fs.sftp.impl 当它没有找到它时,它抛出这个异常。
据我所知,hadoop不支持 sftp 默认情况下为文件系统。这个jira票证[添加sftp文件系统][https://issues.apache.org/jira/browse/hadoop-5732],表示可从hadoop 2.8.0版获得sftp。
要解决这个问题,您需要做两件事:
添加一个包含 sftp hadoop部署的文件系统实现。
设置配置参数: fs.sftp.impl 的完全限定类名 sftp 实施。
我遇到了这个git存储库,它包含 sftp hadoop的实现:https://github.com/wnagele/hadoop-filesystem-sftp. 要使用它,需要设置属性 fs.sftp.implorg.apache.hadoop.fs.sftp.SFTPFileSystem .

相关问题