java - 运行 GNU 并行 Java 作业

标签 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  

我希望这些作业并行运行

最佳答案

如果您的 myFile.txt 包含数百万行,并且您希望将其拆分为每个 CPU 核心一个 block ,然后在该输入上运行 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

关于java - 运行 GNU 并行 Java 作业,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47395981/

相关文章:

python - 将带有运算符的列表缩减为对 mpi4py 中的每个元素求和

R并行共享内存对象(Windows)

java - JPA 对象引用未保存的 transient 实例 - 在刷新之前保存 transient 实例

java - 修复 Box 布局中 Swing 组件的高度

linux - Linux 目录列表中只有问号

python - 修复python多处理中多个进度条(tqdm)的跳转

c# - 具有并行任务时检测网页的最佳实践

java - 在 Java 中创建跳棋盘

java - 如何将字符串添加到 .txt 文件末尾?

java - 无法使用maven命令行工具