如何跨(计算)节点使用 unix 管道?

Posted

技术标签:

【中文标题】如何跨(计算)节点使用 unix 管道?【英文标题】:How can I use unix piping across (compute) nodes? 【发布时间】:2013-10-02 14:56:45 【问题描述】:

我正在尝试使用 unix 管道和 FIFO:s(命名管道)设置处理命令的管道。

我还想将进程的输出发送/流式传输到另一个计算节点,它可以在数据流到达后立即开始处理数据流,也就是说,我想“将标准输出通过管道传输到另一台机器”。我该怎么做?

例如是否可以设置一个 FIFO,在后台将其内容写入另一个计算节点上的 FIFO,或类似的?

【问题讨论】:

为什么不直接使用套接字库呢? netcat 和 ssh 使用 TCP/IP。您可能会从 SCTP 或 UDP 中获得更好的性能。 @BoydStephenSmithJr。我看到 netcat 也支持 UDP(只需将-u 添加到发送方和接收方),所以我想这将是最简单的选择。 【参考方案1】:

您可以使用netcat。在这个最小的例子中,你可以使用管道将cat 的输出传递给netcat

cat local-filename.txt | netcat remote-hostname 1234

其中1234 表示将要使用的TCP 端口。在接收端,你可以使用:

netcat -l 1234 > filename-on-remote-host.txt

-l 表示您正在设置服务器。当原始 netcat 进程完成时,此连接将关闭。如果您需要它继续运行并等待下一次连接,您可以使用-k 选项:

netcat -kl 1234 | some-receiving-command

在任何情况下,您都可以使用缩写 nc 而不是完整的 netcat

nc -kl 1234 | some-receiving-command

【讨论】:

正是我想要的【参考方案2】:

是的,这是可能的,只需为此目的使用sshsshstdin 被发送到另一个主机。例如,您可以使用它通过 tar 将数据发送到不同的服务器:

tar cvzf - data | ssh otherhost 'cd /tmp; tar xvzf -'

【讨论】:

我猜这里主要关注的是 SSH 的性能,因为所有流量都被加密了......

以上是关于如何跨(计算)节点使用 unix 管道?的主要内容,如果未能解决你的问题,请参考以下文章

Azure 机器学习在运行管道时抛出错误“无效图:节点中的计算目标无效”

浅谈管道模型(Pipeline)

SLURM sbatch 是不是会自动跨节点复制用户脚本?

如果没有人连接到网络,如何在计算机不挂机的情况下使用命名管道?

管道和FIFO

如何使用 Pandas 计算跨多列的行中的值?