Hadoop 方案:sftp没有文件系统

Hadoop 方案:sftp没有文件系统,hadoop,sftp,distcp,Hadoop,Sftp,Distcp,我正在尝试在hadoop中使用sftp和distcp,如下所示 hadoop distcp-D fs.sftp.credfile=/home/bigsql/cred.prop sftp://:22/export/home/nz/samplefilehdfs:///user/bigsql/distcp例外情况即将出现,因为Hadoop无法找到方案的文件系统实现:sftp 异常发生在FileSystem.java中。框架试图找到配置参数fs.sftp.impl的值,如果找不到,则抛出此异常 据我所

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


hadoop distcp-D fs.sftp.credfile=/home/bigsql/cred.prop sftp://:22/export/home/nz/samplefilehdfs:///user/bigsql/distcp
例外情况即将出现,因为Hadoop无法找到方案的文件系统实现:
sftp

异常发生在
FileSystem.java
中。框架试图找到配置参数
fs.sftp.impl
的值,如果找不到,则抛出此异常

据我所知,Hadoop默认情况下不支持
sftp
文件系统。这个JIRA票证[添加SFTP文件系统][,表示可以从Hadoop版本2.8.0获得SFTP

要解决此问题,您需要做两件事:

  • 将包含
    sftp
    文件系统实现的jar添加到HADOOP部署中
  • 将配置参数:
    fs.sftp.impl
    设置为
    sftp
    实现的完全限定类名

  • 我遇到了这个git存储库,它包含Hadoop的
    sftp
    实现:。要使用它,您需要将属性
    fs.sftp.impl
    设置为
    org.apache.Hadoop.fs.sftp.SFTPFileSystem
    ,您有实现“sftp”文件系统的jar文件吗?它抱怨说,它找不到任何名为的文件系统“sftp”。默认情况下,“hdfs”是文件系统。我应该查找的默认jar是什么,在哪个位置?我已经识别了jar,它是一个IBM jar文件(正如我使用IBM BigInsights一样),我在core-site.xml文件
    fs.sftp.impl.com.ibm.bigdights.hadoop.fs.sftp.SFTPFileSystem
    中添加了以下内容,但我得到的错误是:
    java.lang.RuntimeException:java.lang.ClassNotFoundException:Class org.apache.hadoop.fs.sftp.SFTPFileSystem未找到
    ,我还将jar提取到类文件a中nd发现路径为
    com\ibm\bigdights\hadoop\fs\sftp\SFTPFileSystem
    您是否确保此jar存在于hadoop路径中?它应该存在于其中一个hadoop路径中:%hadoop\u HOME%/share/hadoop/common/,%hadoop\u HOME%/share/hadoop/common/lib/。我也在使用自定义文件系统,它对我来说运行正常。现在我我收到的错误类似于
    15/11/30 12:32:40 error tools.DistCp:遇到异常java.lang.IllegalStateException:没有为sftp连接指定用户。展开URI或凭据文件。位于com.ibm.biginsights.hadoop.fs.sftp.SFTPFileSystem$ConfWrapper.readConnectionValues(未知源)
    这意味着Hadoop现在正在识别SFTP文件系统。现在,您的凭据有问题。您是否检查了位于“/home/bigsql/cred.prop”的凭据文件是否正确?