方案: 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个驱动器分发文件(我在文件中有所有名称)?谢谢。
答案 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