1

以下のようにdistcpを使用してhadoopでsftpを使用しようとしています

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)

誰でも問題の原因を示唆できますか。

4

1 に答える 1

1

Hadoop がスキームのファイル システム実装を見つけることができないため、例外が発生します: sftp

で例外が発生しFileSystem.javaます。フレームワークは構成パラメーターの値を見つけようとしますが、fs.sftp.impl見つからない場合は、この例外をスローします。

私の知る限り、Hadoop はsftpデフォルトではファイル システムをサポートしていません。この JIRA チケット [Add SFTP FileSystem][ https://issues.apache.org/jira/browse/HADOOP-5732]は、SFTP が Hadoop バージョン 2.8.0 から利用可能であることを示しています。

これを修正するには、次の 2 つのことを行う必要があります。

  1. ファイル システム実装を含む jar をsftpHADOOP デプロイメントに追加します。
  2. config パラメータ:fs.sftp.implを実装の完全修飾クラス名に設定しますsftp

sftpHadoop の実装を含むこの git リポジトリに出くわしました: https://github.com/wnagele/hadoop-filesystem-sftpfs.sftp.implこれを使用するには、プロパティをに設定する必要がありますorg.apache.hadoop.fs.sftp.SFTPFileSystem

于 2015-11-23T18:30:31.430 に答える