运行 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
这是使用输入 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