没有文件系统的方案:SFTP(No FileSystem for scheme: sftp)

2019-10-29 21:54发布

我试图在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) 

任何人都可以提出什么可能是问题的原因。

Answer 1:

唯一的例外来了,因为Hadoop是无法找到一个方案的文件系统实现: sftp

在发生异常FileSystem.java 。 该框架试图找到配置参数的值fs.sftp.impl ,当它没有找到它,它抛出该异常。

据我所知,Hadoop的不支持sftp的默认文件系统。 这JIRA票[添加SFTP文件系统] [ https://issues.apache.org/jira/browse/HADOOP-5732] ,表明,SFTP可从Hadoop的2.8.0版。

为了解决这个问题,你需要做两件事情:

  1. 添加包含一个jar sftp文件系统实现您HADOOP部署。
  2. 设置配置参数: fs.sftp.impl到的完全限定类名sftp实施。

我碰到这个git仓库,其中包含sftp为Hadoop实现: https://github.com/wnagele/hadoop-filesystem-sftp 。 要使用此功能,你需要属性设置fs.sftp.implorg.apache.hadoop.fs.sftp.SFTPFileSystem



文章来源: No FileSystem for scheme: sftp