【问题标题】:Using GNU Parallel for cluster computing over LAN with rsync使用 GNU Parallel 通过 rsync 在 LAN 上进行集群计算
【发布时间】:2019-01-08 10:48:53
【问题描述】:

我有两台机器,我想使用 GNU Parallel 让多个进程“捕获”两台机器上某些文本文件的内容。

我有以下设置。

在本地机器上,在同一目录中,我有以下文件:

  • cmd.sh - 包含以下内容的 bash 文件:'cat "$@"'
  • test1.txt - 一个文本文件,内容为:'Test 1'
  • test2.txt - 一个文本文件,内容为:'Test 2'
  • test3.txt - 一个文本文件,内容为:'Test 3'
  • nodefile - 包含以下内容的文本文件:

    2/:

    4/dan@192.168.0.3

如果我使用 wordpress 链接(如下)中的节点文件示例,并且我的 IP 是 192.168.0.2。

这些文件都不会在远程计算机上复制。我想让多个进程从两台机器上“捕获”每个 test?.txt 文件的内容。

最好是这样:

  • 不会在远程计算机上留下任何工件
  • 将保持本地目录的内容不变。

我已经能够按照this wordpress example 使用节点文件远程执行多处理命令,但没有涉及远程回显文件。

到目前为止,我有以下内容:

parallel --sshloginfile nodefile --workdir . --basefile cmd.sh -a cmd.sh --trc ::: test1.txt test2.txt test3.txt

但这不起作用,正在从我的目录中删除文件而不是替换它们,并给出 rsync 错误。我(很遗憾)目前无法提供错误或复制设置。

我对并行非常缺乏经验,谁能指导我完成这项任务的语法? (到目前为止)我无法在手册页或网络上找到答案。

运行 Ubuntu 16.04 LTS 并使用最新版本的 GNU Parallel。

【问题讨论】:

  • 目前还不清楚您是想“捕捉”内容还是“回显”文件名。
  • 你说得对,我把它改成了猫。正在从记忆中消失......

标签: bash multiprocessing gnu-parallel


【解决方案1】:

你犯了一些错误:

  • -a 用于提供输入源。它基本上是 ::::
  • 的别名
  • 您没有在 GNU Parallel 的选项之后和 ::: 之前给出运行命令
  • --trc 接受一个参数(即要传回的文件)。您没有要传回的文件,因此请改用--transfer --cleanup

所以:

chmod +x cmd.sh
parallel --sshloginfile nodefile --workdir . --basefile cmd.sh --transfer --cleanup ./cmd.sh ::: test1.txt test2.txt test3.txt

不清楚是否要向远程机器传输任何东西,所以也许这真的是正确答案:

parallel --sshloginfile nodefile --nonall --workdir . ./cmd.sh test1.txt test2.txt test3.txt

【讨论】:

  • 此解决方案有效,但会删除文件 cmd.sh 的本地副本以及每次运行的文本文件之一。
  • 如果您不想将传输的文件删除,请删除'--cleanup'。
  • 我希望将文件传输到远程机器,然后从远程机器上清理。我希望保留本地计算机上的文件。您的第一个命令是让远程计算机保持清洁,但同时也从本地计算机中删除 cmd.sh。这不是期望的行为。此外,您的第二个命令只是在本地“捕获”内容并在远程机器上为 cmd.sh 抛出文件未找到错误
  • 您遗漏了一些内容:cmd.sh 不会在本地计算机上被删除。所以你正在做一些你没有写的事情。您是否可能在 nodefile 中有一个实际上是本地机器的主机?如果你想拥有它,你需要用':'替换它。
  • 我确实在节点文件中引用了我的本地机器,现在看起来很明显。谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-04-26
相关资源
最近更新 更多