GNU Parallel:在分发目标文件时将文件从一个源分发到远程主机

时间:2014-10-23 05:33:17

标签: gnu-parallel

方案: S3存储桶有1000个文件。我有两台机器。这些机器中的每一台都有两个驱动器/ dev / sda和/ dev / sdb。 约束:没有一个驱动器可以容纳所有1000个文件。没有一台机器可以容纳所有1000个文件。 期望的结果:使用GNU并行在两台机器上的4个驱动器上分发1000个文件。

我尝试过这样的事情:

parallel --xapply --joblog out.txt -S:,R echo {1} {2} ::: "/dev/sda" "/dev/sdb" ::: {0..10}

但我明白了:

Seq Host    Starttime   JobRuntime  Send    Receive Exitval Signal  Command  
2   :   1414040436.607       0.037  0   0   0   0   echo /dev/sda 1
4   :   1414040436.615       0.030  0   0   0   0   echo /dev/sda 3
6   :   1414040436.623       0.024  0   0   0   0   echo /dev/sda 5
8   :   1414040436.632       0.015  0   0   0   0   echo /dev/sda 7
10  :   1414040436.640       0.006  0   0   0   0   echo /dev/sda 9
1   R   1414040436.603       0.088  0   0   0   0   echo /dev/sdb 0
3   R   1414040436.611       0.092  0   0   0   0   echo /dev/sdb 2
5   R   1414040436.619       0.095  0   0   0   0   echo /dev/sdb 4
7   R   1414040436.628       0.095  0   0   0   0   echo /dev/sdb 6
9   R   1414040436.636       0.096  0   0   0   0   echo /dev/sdb 8
11  R   1414040436.645       0.094  0   0   0   0   echo /dev/sdb 10

哪里' R'是远程主机IP。如何从S3到4个驱动器分发文件(我在文件中有所有名称)?谢谢。

1 个答案:

答案 0 :(得分:0)

GNU Parallel非常适合在旧的工作完成后开始新工作:它将作业分成动态而不是事先。

您正在寻找的是预先做到这一点的方法。

您的--xapply方法看似合理,但您需要强制GNU Parallel均匀分配给主机。您当前的方法取决于每个主机完成的速度,而这通常不起作用。

类似于:

parallel echo {1}//{2} ::: sda sdb ::: server1 server2 | parallel --colsep '//' --xapply echo copy {3} to {1} on {2} :::: - filenames.txt

或者:

parallel --xapply echo copy {3} to {1} on {2} ::: sda sda sdb sdb ::: server1 server2 server1 server2 :::: filenames.txt