运行 GNU 并行 Java 作业

Running GNU Parallel Java Job

这是使用输入 myFile.txt 执行 java 作业的正确方法吗?我想做的是 运行 MyJavaClass 程序,输入到 args[0],但是,我想 运行 在我的机器上的多核本地而不是集群上。

parallel java MyJavaClass ::: myFile.txt

编辑:

我想要完成的是:

java MyJavaClass arg1 arg2 arg3 
java MyJavaClass arg4 arg5 arg6
java MyJavaClass arg7 arg8 arg9  

并且我希望这些工作能够并行 运行

parallel java MyJavaClass ::: myFile.txt

将 运行:

java MyJavaClass myFile.txt

鉴于:

parallel java MyJavaClass ::: myFile1.txt myFile2.txt

将 运行 这些并行:

java MyJavaClass myFile1.txt
java MyJavaClass myFile2.txt

如果文件 myargs 包含:

arg1
arg2
arg3
arg4
arg5
arg6
arg7
arg8
arg9

你想要 运行:

java MyJavaClass arg1 arg2 arg3
java MyJavaClass arg4 arg5 arg6
java MyJavaClass arg7 arg8 arg9

那么你可以这样做:

parallel -N3 java MyJavaClass :::: myargs

如果您有 myFile.txt 数百万行,并且您希望每个 CPU 核心拆分为一个块,然后在该输入上 运行 MyJavaClass,我们假设 MyJavaClass 从 stdin(标准输入)读取并打印到 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输出一个文件名,那么3行看起来像这样

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