将文件从HDFS目录传输到sftp服务器

k75qkfdt  于 2022-12-09  发布在  HDFS
关注(0)|答案(2)|浏览(361)

我正在尝试将所有的part* 文件从一个目录直接从HDFS目录转移到SFTP服务器。HDFS文件夹中的所有文件都很大,所以我不想将它们复制到本地文件系统。
当前设置为

hdfs dfs -text "<HDFS_DIR>/part*" > localfile

curl "<sftp_username>:" --key "<private_key_file_path>" --pubkey "<public_key_file_path>" \
    --upload-file local_file "sftp://<SFTP_HOST>/<Upload_dir>"

如何直接从HDFS上传文件到sftp服务器路径,而不将文件写入本地文件系统。
我考虑了以下选项
1.使用sftp获取(未找到足够的资源)-https://sqoop.apache.org/docs/1.99.7/user/connectors/Connector-SFTP.html
1.将每个part文件复制到本地fs并将其移动到sftp服务器(效率低下)
1.带有sftp的hadoop distcp在cdh 5中不起作用。我使用的是CDH-5.16.2
请让我知道哪种方法最好。谢谢!

o4hqfura

o4hqfura1#

也许你可以使用--upload-file .--upload-file -将hdfs的输出直接传输到curl进行上传,例如
文件系统-文本“<HDFS_DIR>/part*”| curl “<sftp_username>:“--密钥“<private_key_file_path>“--公钥“<public_key_file_path>“
--上传文件。“sftp://<SFTP_HOST>/<Upload_dir>“
关于.-之间的区别
使用文件名“-”(一个破折号)可使用stdin而不是给定文件。或者,可以指定文件名“.”(一个句点)而不是“-”,以便在非阻塞模式下使用stdin,从而允许在上载stdin时阅读服务器输出。
在我看来,curl可能会尝试在开始上传之前将整个文件放在ram中,或者至少放在stdin缓冲区中,所以如果您希望处理大文件,.听起来比-更安全。

kmpatx3s

kmpatx3s2#

你也许可以这样做。

hdfs dfs -cat <HDFS_DIR>/part* | ssh <sftp_username>:<sftp_hostname> 'cat - > <Upload_dir>/<file_name>'

相关问题