我有一个脚本可以将大量文件从本地计算机传输到远程计算机上的HDFS。在脚本中,它使用ssh
,如下所示:
cat localfile | ssh user@remote 'hadoop fs -put - path-to-target-file'
由于我要传输大量文件,并且在每次传输之前我需要检查是否已存在具有相同名称的目标文件,因此对于每次传输,我必须使用两个ssh命令(检查存在,放置) 。因为建立SSH连接非常耗时,所以我想知道是否有方法使SSH连接保持活动状态,以便在第一次成功连接后,其他ssh命令不会尝试建立新连接,而是直接使用旧连接
另外,我使用多个进程进行上传。是否有可能保持多个不同的连接存活?例如,如果我使用4个进程,是否可以同时保持4个不同的连接?
感谢。
答案 0 :(得分:1)
这可能不适用于Hadoop,我不知道:考虑编写一个sftp会话脚本。 mput file*
太棒了。
相关:要保持当前会话,这在~/.ssh/config
:
ServerAliveInterval 300
ServerAliveCountMax 60
答案 1 :(得分:1)
这是一个错误的方法开始。首先,如果SSH传递了一个在ssh user@host "command"
之类的远程服务器上执行的命令,那么将在命令执行后退出。
您应该考虑使用sftp
,scp
或rsync
。后者将满足您检查远程版本的需求,并控制目标是否被各种条件覆盖,以及在一个连接中执行多个文件操作。查看Rsync网站。
答案 2 :(得分:0)
您可以向服务器发送操作,以防止因不活动而导致连接丢失。这可以通过在〜/ .ssh / config
中添加以下行来完成 Host *
ServerAliveInterval <seconds>
其中'秒'是发送无操作代码之前的秒数。