我正在处理一个Java代码到SFTP文件到远程HDFS文件系统。它适用于小于200 MB的smallers文件。对于大文件,我收到以下错误。
17/08/08 02:44:49 ERROR sftp.SftpClient: Error writing data over SFTP service, error was: Failure
4: Failure
at com.jcraft.jsch.ChannelSftp.throwStatusError(ChannelSftp.java:2289)
at com.jcraft.jsch.ChannelSftp.checkStatus(ChannelSftp.java:1937)
at com.jcraft.jsch.ChannelSftp._put(ChannelSftp.java:541)
at com.jcraft.jsch.ChannelSftp.put(ChannelSftp.java:439)
at com.jcraft.jsch.ChannelSftp.put(ChannelSftp.java:406)
我的代码如下:
public static void sendFile(String targetDirectory, String sourceFileWithFullPath) throws IOException {
SftpClient client = new SftpClient("karthick");
BufferedInputStream bis = null;
Configuration conf = new Configuration();
FileSystem fs = FileSystem.get(conf);
FSDataInputStream fsdisPath = null;
String filePath = null;
try {
filePath=sourceFileWithFullPath;
Path inputPath = new Path(filePath);
fsdisPath = fs.open(inputPath);
bis = new BufferedInputStream(fsdisPath);
client.login("karthick","/karthick/id_rsa", null);
client.changeWorkingDirectory(targetDirectory);
client.storeFile(inputPath.getName(), bis);
System.out.println("The actual path is" + client.getAbsolutePath(sourceFileWithFullPath));
}
finally {
if (client != null) {
client.disconnect();
}
if (bis != null) {
bis.close();
}
}
}
我确保我有足够的磁盘空间,没有内存问题和所有必需的权限。可能有什么其他可能的方法来避免这个问题。我打算让这个实用程序复制500GB文件。我现在开始学习java并学习基础知识。任何建议都将不胜感激。
更新:我收到此错误以及com.jcraft.jsch.JSchException:verify:false。我已经在必要时添加了密钥。我该如何解决这个问题
ERROR sftp.SftpClient: Error during login to karthick@karthick
com.jcraft.jsch.JSchException: verify: false
at com.jcraft.jsch.Session.connect(Session.java:295)
at com.jcraft.jsch.Session.connect(Session.java:150)
at org.mule.transport.sftp.SftpClient.login(SftpClient.java:178)
答案 0 :(得分:1)
看起来有四个原因之一:
1)您要写入的文件夹的权限
2)文件路径(或名称)上的空格。
3)文件路径中的斜杠错误。
4)读取或写入巨大的文件时会发生超时问题..