运行GNU并行Java作业

时间:2017-11-20 15:53:11

标签: java terminal parallel-processing bigdata gnu-parallel

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

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

3 个答案:

答案 0 :(得分:1)

parallel java MyJavaClass ::: myFile.txt

将运行:

java MyJavaClass myFile.txt

鉴于:

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

将并行运行:

java MyJavaClass myFile1.txt
java MyJavaClass myFile2.txt

答案 1 :(得分:1)

如果文件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

答案 2 :(得分:1)

如果<?php date_default_timezone_set('UTC'); $lastDay = date("Y-m-d"); while (true) { $now = date("Y-m-d"); if ($now !== $lastDay) { $lastDay = $now; print("First loop of the new day"); } sleep(1); } ?> 有数百万行,并且您希望每个CPU核心拆分为一个块,然后在该输入上运行myFile.txt,我们假设MyJavaClass读取从标准输入(标准输入)和打印到标准输出(标准输出),所以3行看起来像这样:

MyJavaClass

然后使用GNU Parallel看起来像这样:

cat chunk1 | java MyJavaClass > output1
cat chunk2 | java MyJavaClass > output2
cat chunk3 | java MyJavaClass > output3

如果parallel -a myFile.txt --pipepart --block -1 java MyJavaClass > combined_output 取代文件名,那么3行看起来像这样:

MyJavaClass

然后这可能有效:

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 输出到文件名,那么3行看起来像这样

MyJavaClass

然后您可以使用java MyJavaClass chunk1 --output-file chunk1.output java MyJavaClass chunk2 --output-file chunk2.output java MyJavaClass chunk3 --output-file chunk3.output 作为工作号码,因此是唯一的:

{#}