方案没有文件系统:sftp
No FileSystem for scheme: sftp
我正尝试在 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.access0(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)
任何人都可以提出问题的原因。
出现异常,因为 Hadoop 无法找到方案的文件系统实现:sftp
。
异常发生在FileSystem.java
。框架尝试查找配置参数 fs.sftp.impl
的值,如果找不到,则会抛出此异常。
据我所知,Hadoop默认不支持sftp
文件系统。此 JIRA 票证 [添加 SFTP 文件系统][https://issues.apache.org/jira/browse/HADOOP-5732],表明 SFTP 从 Hadoop 版本 2.8.0 开始可用。
要解决此问题,您需要做两件事:
- 将包含
sftp
文件系统实现的 jar 添加到您的 HADOOP 部署。
- 将配置参数:
fs.sftp.impl
设置为 sftp
实现的完全限定 class 名称。
我发现了这个 git 存储库,其中包含 sftp
Hadoop 实现:https://github.com/wnagele/hadoop-filesystem-sftp。要使用它,您需要将 属性 fs.sftp.impl
设置为 org.apache.hadoop.fs.sftp.SFTPFileSystem
.
我正尝试在 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.access0(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)
任何人都可以提出问题的原因。
出现异常,因为 Hadoop 无法找到方案的文件系统实现:sftp
。
异常发生在FileSystem.java
。框架尝试查找配置参数 fs.sftp.impl
的值,如果找不到,则会抛出此异常。
据我所知,Hadoop默认不支持sftp
文件系统。此 JIRA 票证 [添加 SFTP 文件系统][https://issues.apache.org/jira/browse/HADOOP-5732],表明 SFTP 从 Hadoop 版本 2.8.0 开始可用。
要解决此问题,您需要做两件事:
- 将包含
sftp
文件系统实现的 jar 添加到您的 HADOOP 部署。 - 将配置参数:
fs.sftp.impl
设置为sftp
实现的完全限定 class 名称。
我发现了这个 git 存储库,其中包含 sftp
Hadoop 实现:https://github.com/wnagele/hadoop-filesystem-sftp。要使用它,您需要将 属性 fs.sftp.impl
设置为 org.apache.hadoop.fs.sftp.SFTPFileSystem
.