3

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

我试过这样的事情:

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

但我得到:

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

其中“R”是远程主机 IP。如何将文件(我在一个文件中包含所有名称)从 S3 分发到 4 个驱动器?谢谢你。

4

1 回答 1

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
于 2014-10-23T06:38:35.670 回答