这是使用输入myFile.txt
执行Java作业的正确方法吗?我想做的是在输入args [0]的情况下运行MyJavaClass程序,但是,我想在多个内核而不是集群上的本地机器上运行此程序。
parallel java MyJavaClass ::: myFile.txt
编辑:
我要完成的工作如下:
java MyJavaClass arg1 arg2 arg3
java MyJavaClass arg4 arg5 arg6
java MyJavaClass arg7 arg8 arg9
我希望这些作业可以并行运行
最佳答案
如果您有myFile.txt
包含数百万行的行,并且希望将其拆分为每个CPU内核一个块,然后在该输入上运行MyJavaClass
,则假定MyJavaClass
从标准输入(标准输入)中读取并打印到stdout(标准输出),因此3行看起来像这样:
cat chunk1 | java MyJavaClass > output1
cat chunk2 | java MyJavaClass > output2
cat chunk3 | java MyJavaClass > output3
然后使用GNU Parallel看起来像这样:
parallel -a myFile.txt --pipepart --block -1 java MyJavaClass > combined_output
如果
MyJavaClass
改用文件名,则3行如下所示:java MyJavaClass chunk1 > output1
java MyJavaClass chunk2 > output2
java MyJavaClass chunk3 > output3
那么这可能工作:
# --fifo is fast, but may not work if MyJavaClass seeks into the file
parallel -a myFile.txt --pipepart --fifo --block -1 java MyJavaClass {} > combined_output
# --cat creates temporary files
parallel -a myFile.txt --pipepart --cat --block -1 java MyJavaClass {} > combined_output
如果
MyJavaClass
输出到文件名,则三行如下所示java MyJavaClass chunk1 --output-file chunk1.output
java MyJavaClass chunk2 --output-file chunk2.output
java MyJavaClass chunk3 --output-file chunk3.output
然后,您可以使用
{#}
是作业编号,因此是唯一的:parallel [...] java MyJavaClass {} --output-file {#}.output