我正在尝试将所有的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
请让我知道哪种方法最好。谢谢!
2条答案
按热度按时间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缓冲区中,所以如果您希望处理大文件,
.
听起来比-
更安全。kmpatx3s2#
你也许可以这样做。