标签: gnu-parallel

GNU 并行过慢

我需要运行grep几百万个文件。因此,我尝试按照此处提到两种方法加快速度:xargs -P -nGNU parallel。我在我的文件子集(数量为 9026)上尝试了这个,结果如下:

  1. 随着xargs -P 8 -n 1000,非常快:

    $ time find tex -maxdepth 1 -name "*.json" | \
                    xargs -P 8 -n 1000 grep -ohP "'pattern'" > /dev/null
    
    real    0m0.085s
    user    0m0.333s
    sys     0m0.058s
    
    Run Code Online (Sandbox Code Playgroud)
  2. 随着parallel,非常慢:

    $ time find tex -maxdepth 1 -name "*.json" | \
                    parallel -j 8 grep -ohP "'pattern'" > /dev/null
    
    real    0m21.566s
    user    0m22.021s
    sys     0m18.505s
    
    Run Code Online (Sandbox Code Playgroud)
  3. 甚至顺序xargsparallel: …

grep xargs gnu-parallel

5
推荐指数
1
解决办法
2243
查看次数

GNU 并行 ssh 作业:如果服务器死机,未完成的作业会发生什么?

假设我们想使用 GNU 并行将作业分派到一组服务器。如果其中一台服务器在忙于执行作业时死机(电源故障、热关机...)会发生什么?GNU parallel 会只是将相同的作业分派到另一台服务器,还是会永远丢失该作业?

gnu-parallel

5
推荐指数
1
解决办法
586
查看次数

BASH:并行运行

我有一个 bash 脚本,它接受三个长度相等的数组作为输入:METHODSINFILESOUTFILES

该脚本将解决所有索引( ) 的METHODS[i]问题INFILES[i]并将结果保存到。OUTFILES[i]i0 <= i <= length-1

中的每个元素METHODS都是以下形式的字符串:

$HOME/program/solver -a <method>
Run Code Online (Sandbox Code Playgroud)

其中solver是一个程序,可以按如下方式调用:

$HOME/program/solver -a <method> -m <input file> -o <output file> --timeout <timeout in seconds>

该脚本并行解决所有问题,并将每个实例的运行时间限制设置为 1 小时(但有些方法可以很快解决某些问题),如下所示:

#!/bin/bash
source METHODS
source INFILES
source OUTFILES

start=`date +%s`

## Solve in PARALLEL
for index in ${!OUTFILES[*]}; do 
    (alg=${METHODS[$index]}
    infile=${INFILES[$index]}
    outfile=${OUTFILES[$index]}

    ${!alg}  -m $infile -o $outfile --timeout 3600) &
done
wait


end=`date +%s` …
Run Code Online (Sandbox Code Playgroud)

bash parallelism gnu-parallel

5
推荐指数
1
解决办法
1251
查看次数

来自特定文件夹的并行 scp 文件

我想将 scp 文件从machineA我的文件中提取出来machineB,这就是我的做法。我被一个从复制一堆文件一个primary文件夹machineAprimary文件夹中machineB,并secondarymachineAsecondary的文件夹machineB

trinity@machineB:~$ scp trinity@machineA:/data01/primary/* /data01/primary/
trinity@machineB:~$ scp trinity@machineA:/data02/secondary/* /data02/secondary/
Run Code Online (Sandbox Code Playgroud)

有什么方法可以并行复制多个文件?喜欢一个文件夹中的五个文件吗?所以不是一次复制一个文件,我想分别从主文件夹或辅助文件夹中复制五个文件?

基本上我想将主要和次要文件夹中的任何内容复制machineAmachineB并行中。

如果可以使用,我的机器上也安装了 GNU Parallel。我试过下面的命令,但它不起作用。我期望它一次并行复制 5 个文件,直到从该文件夹复制所有内容。

parallel -j 5 scp trinity@machineA:/data01/primary/* /data01/primary/
Run Code Online (Sandbox Code Playgroud)

我的并行语法有什么问题吗?我可以从远程文件夹并行复制五个文件直到从中复制所有文件的最佳方法是什么?

linux bash scp rsync gnu-parallel

5
推荐指数
1
解决办法
4698
查看次数

如何在每个作业的记录中并行运行 GNU,每个内核有 1 个进程

我真正想做的是运行 X 个作业,并行运行 X 个数量以测试 API 竞争条件。

我想出了这个

echo {1..10} | xargs -n1 | parallel -m 'echo "{}"';
Run Code Online (Sandbox Code Playgroud)

哪个打印

7 8 9
10
4 5 6
1 2 3
Run Code Online (Sandbox Code Playgroud)

但我真正想看到的是(注意顺序实际上并不重要)。

1
2
3
4
5
6
7
8
9
10
Run Code Online (Sandbox Code Playgroud)

并且这些将一次并行处理 4 个(或任何数量的 CPU/核心,我有,例如--jobs 4)。总共 10 次单独执行。

我试过这个

echo {1..10} | xargs -n1 | parallel --semaphore --block 3  -m 'echo -n "{} ";
Run Code Online (Sandbox Code Playgroud)

但它似乎只打印一次。如果您的解决方案不需要 xargs ,这似乎是对默认记录分隔符是换行符的想法的一种破解,但我也无法获得像我想要的那样工作的空间。

10 是一个相当小的数字,但可以说它要大得多, 1000

echo {1..1000} | xargs -n1 | parallel …
Run Code Online (Sandbox Code Playgroud)

gnu parallelism gnu-parallel

5
推荐指数
1
解决办法
2062
查看次数

计算文件中每一行的 md5sum

给定一个文件,如:

a
b
c
Run Code Online (Sandbox Code Playgroud)

我如何获得如下输出:

a       0cc175b9c0f1b6a831c399e269772661
b       92eb5ffee6ae2fec3ad71c777531578f
c       4a8a08f09d37b73795649038408b5f33
Run Code Online (Sandbox Code Playgroud)

以有效的方式?(输入为 80 GB)

hashsum gnu-parallel

5
推荐指数
1
解决办法
2885
查看次数

标准输出附加到文件大小限制

我正在从美国国家公路交通安全管理局 API 中提取大约 25,000,000 个 VIN 编号的 VIN 规范。这是大量数据,因为我没有以任何方式转换数据,curl似乎是一种比 Python 更高效、更轻量级的完成任务的方式(因为 Python 的 GIL 使并行处理有点痛苦)。

在下面的代码中,vins.csv是一个包含 2500 万个 VIN 的大样本的文件,分成 100 个 VIN 的块。这些将被传递给使用 4 个内核的 GNU Parallel。一切都nhtsa_vin_data.csv在最后倾倒。

$ cat vins.csv | parallel -j10% curl -s --data "format=csv" \
   --data "data={1}" https://vpic.nhtsa.dot.gov/api/vehicles/DecodeVINValuesBatch/ \
      >> /nas/BIGDATA/kemri/nhtsa_vin_data.csv
Run Code Online (Sandbox Code Playgroud)

这个过程开始时每分钟写入大约 3,000 个 VIN,随着时间的推移逐渐变慢(目前约为 1,200/分钟)。

我的问题

  • 我的命令中是否有任何内容会nhtsa_vin_data.csv随着规模的增长而增加开销?
  • 这与 Linux 处理>>操作的方式有关吗?

更新 #1 - 解决方案

每个@slm 的第一个解决方案 - 使用并行的 tmp 文件选项将每个 curl 输出写入其自己的 .par 文件,最后合并:

$ …
Run Code Online (Sandbox Code Playgroud)

shell-script curl stdout gnu-parallel

5
推荐指数
1
解决办法
713
查看次数

ssh 连接的 MaxStartups 和 MaxSessions 配置参数?

我从复制文件machineBmachineCmachineA,因为我跑在我下面的shell脚本machineA

如果文件不在那里,machineB那么它machineC肯定应该在那里,所以我会先尝试复制文件machineB,如果它不在那里,machineB那么我会尝试从machineC.

我正在使用 GNU Parallel 库并行复制文件,并且工作正常。目前我正在并行复制 10 个文件。

下面是我的 shell 脚本 -

#!/bin/bash

export PRIMARY=/test01/primary
export SECONDARY=/test02/secondary
readonly FILERS_LOCATION=(machineB machineC)
export FILERS_LOCATION_1=${FILERS_LOCATION[0]}
export FILERS_LOCATION_2=${FILERS_LOCATION[1]}
PRIMARY_PARTITION=(550 274 2 546 278) # this will have more file numbers
SECONDARY_PARTITION=(1643 1103 1372 1096 1369 1568) # this will have more file numbers

export dir3=/testing/snapshot/20140103

find "$PRIMARY" -mindepth 1 -delete
find "$SECONDARY" -mindepth 1 -delete

do_Copy() …
Run Code Online (Sandbox Code Playgroud)

linux scp sshd gnu-parallel

4
推荐指数
1
解决办法
4万
查看次数

防止 GNU 并行分割引用的参数

我正在尝试使用GNU Parallel结合常量和变化的参数来多次运行comman。但由于某种原因,即使我在将常量参数传递给parallel.

在此示例中,常量参数应作为单个参数而不是两个参数'a b'传递:debug-call

$ parallel debug-call 'a b' {} ::: {1..2}
[0] = '[...]/debug-call'
[1] = 'a'
[2] = 'b'
[3] = '1'
[0] = '[...]/debug-call'
[1] = 'a'
[2] = 'b'
[3] = '2'
Run Code Online (Sandbox Code Playgroud)

debug-call是一个简单的脚本,它打印传入的每个参数argv。相反,我希望看到这个输出:

[0] = '[...]/debug-call'
[1] = 'a b'
[2] = '1'
[0] = '[...]/debug-call'
[1] = 'a b'
[2] = '2'
Run Code Online (Sandbox Code Playgroud)

这是一个错误还是有一个选项可以阻止 GNU Parallel 在将命令行参数传递给命令之前分割它们?

command-line quoting gnu-parallel

4
推荐指数
1
解决办法
2170
查看次数

在多个远程服务器上并行运行本地 shell 脚本并获取状态

我需要在远程服务器上运行本地脚本。运行脚本以并行运行很重要。

[ec2-user@ip-172-31-43-140 ~]$ cat hosts.txt
             ec2-user@18.218.191.143
             ec2-user@18.220.183.27
             ec2-user@18.222.199.72
             ec2-user@13.58.207.76
             ec2-user@18.191.231.120
[ec2-user@ip-172-31-43-140 ~]$ cat hosts.txt  | xargs -I {} ssh {} -T 'bash -s' < ./file.sh
ssh: Could not resolve hostname #!/bin/sh: Name or service not known
xargs: ssh: exited with status 255; aborting
[ec2-user@ip-172-31-43-140 ~]$
Run Code Online (Sandbox Code Playgroud)

ssh shell-script parallelism gnu-parallel

4
推荐指数
1
解决办法
2951
查看次数

标签 统计

gnu-parallel ×10

parallelism ×3

bash ×2

linux ×2

scp ×2

shell-script ×2

command-line ×1

curl ×1

gnu ×1

grep ×1

hashsum ×1

quoting ×1

rsync ×1

ssh ×1

sshd ×1

stdout ×1

xargs ×1