标签: gnu-parallel

使用 GNU Parallel 和 Split

我正在将一个非常庞大的文件加载到 postgresql 数据库中。为此,我首先split在文件中使用获取较小的文件(每个 30Gb),然后使用GNU Parallel和将每个较小的文件加载到数据库中psql copy

问题是分割文件大约需要7个小时,然后它开始每个核心加载一个文件。我需要的是一种方法来告诉split它每次完成写入文件时将文件名打印到 std 输出,以便我可以将其通过管道传输到Parallel它并在split完成写入时开始加载文件。像这样的东西:

split -l 50000000 2011.psv carga/2011_ | parallel ./carga_postgres.sh {}
Run Code Online (Sandbox Code Playgroud)

我已阅读split手册页,但找不到任何内容。有没有办法用split或任何其他工具来做到这一点?

split files gnu-parallel

9
推荐指数
2
解决办法
4502
查看次数

穷人的 GNU Parallel 在 ksh 中实现?

我想使用GNU 并行的功能,它可以并行执行命令和列表,并在完成后将其吐出,但是,我不想在我们所有的服务器上安装 GNU 并行。

或者也许是xargs?

是否有 GNU Parallel 的 ksh 实现?在这种情况下,它不必像 GNU Parallel 那样按顺序完成——只要所有输出都可以通过管道传输或存储即可。我还想避免使用临时文件。

ksh gnu parallelism gnu-parallel

8
推荐指数
1
解决办法
1092
查看次数

如何有效地使用 GNU 并行

假设我想在压缩文本文件中找到所有匹配项:

$ gzcat file.txt.gz | pv --rate -i 5 | grep some-pattern
Run Code Online (Sandbox Code Playgroud)

pv --rate此处用于测量管道吞吐量。在我的机器上它大约是 420Mb/s(解压后)。

现在我正在尝试使用 GNU 并行执行并行 grep。

$ gzcat documents.json.gz | pv --rate -i 5 | parallel --pipe -j4 --round-robin grep some-pattern
Run Code Online (Sandbox Code Playgroud)

现在吞吐量下降到 ~260Mb/s。而更有趣的parallel过程本身是使用大量 CPU。多于grep进程(但少于gzcat)。

编辑 1:我尝试了不同的块大小 ( --block),以及-N/-L选项的不同值。在这一点上没有任何帮助。

我究竟做错了什么?

shell gnu-parallel

8
推荐指数
2
解决办法
3745
查看次数

如何在 Amazon Linux 上获得 GNU 并行?

最好不必从源代码编译它。我尝试添加在 Google 上找到的存储库:CentOS 6CentOS 5,但两者都给了我:

[ec2-user@ip-10-0-1-202 yum.repos.d]$ sudo yum install parallel -y
Loaded plugins: priorities, update-motd, upgrade-helper
amzn-main/2016.03                                                                                                                                                                                                  | 2.1 kB     00:00
amzn-updates/2016.03                                                                                                                                                                                               | 2.3 kB     00:00
952 packages excluded due to repository priority protections
Resolving Dependencies
--> Running transaction check
---> Package parallel.noarch 0:20160522-1.1 will be installed
--> Processing Dependency: /usr/bin/fish for package: parallel-20160522-1.1.noarch
--> Processing Dependency: /usr/bin/ksh for package: parallel-20160522-1.1.noarch
--> Processing Dependency: /usr/bin/zsh for package: parallel-20160522-1.1.noarch
--> Processing Dependency: /bin/pdksh for package: parallel-20160522-1.1.noarch …
Run Code Online (Sandbox Code Playgroud)

amazon-ec2 gnu-parallel

8
推荐指数
1
解决办法
8204
查看次数

如何使用 GNU 并行计算 sha256 哈希?

基于此: 同时计算多个摘要(md5,sha256)?

我有一个文件夹,里面有大量我想要计算 SHA256 哈希的文件。

我曾经对代码段进行编码:

#!/bin/bash
for file in *; do
sha256sum "$file" > "$file".sha &
done
Run Code Online (Sandbox Code Playgroud)

目前并行计算 sha256 哈希,除了我的计算机只有 16 个物理内核。

所以,我的问题是如何使用 GNU 并行运行它,但只使用我系统上可用的 16 个物理内核运行,并且一旦完成哈希,它会自动选择下一个文件散列?

shell-script hashsum gnu-parallel

8
推荐指数
2
解决办法
1359
查看次数

使用 GNU 并行在 HPC 集群上运行并行 bash 作业

在 HPC 集群上,我尝试permute2.sh使用 GNU 并行从 1 个 bash 脚本运行多个 bash 脚本 ( ),但是它并没有完成每项工作。它随机完成一项工作,而它却在做另一项工作。

permute1.sh:

PROCS=144 
permuations=1000
seq 1 $permuations | parallel -j $PROCS sh permute2.sh {}
Run Code Online (Sandbox Code Playgroud)

permute2.sh(从文件中随机抽取 100 行并对其执行一些操作以进行排列)

id=$1
randomlines=100
awk 'BEGIN{srand();} {a[NR]=$0}
END{for(I=1;I<='$randomlines';I++){x=int(rand()*NR);print a[x];}}'
FILE.txt > results/randomlines.$id.txt

# do stuff with randomlines.$id.txt.. 
Run Code Online (Sandbox Code Playgroud)

当我运行时, permute1.sh我可以看到它为每个 cpu 1 (randomlines.1.txt - randomlines.144.txt) 创建了 144 个文件,但其中大部分是空的并停止工作,有些已完成。我究竟做错了什么?

cluster gnu-parallel

7
推荐指数
1
解决办法
1525
查看次数

GNU 并行 - 数组中的两个参数作为参数

我有一个使用 gnu 并行的脚本。我想为每个“迭代”传递两个参数

在串行运行中,我有类似的东西:

for (( i=0; i<=10; i++ ))
do
  a = tmp1[$i]
  b = tmp2[$i]
done
Run Code Online (Sandbox Code Playgroud)

我想让这个平行

func pf()
{
   a=$1
   b=$2
}
export -f pf
parallel --jobs 5 --linebuffer pf ::: <what to write here?>
Run Code Online (Sandbox Code Playgroud)

linux gnu-parallel

7
推荐指数
1
解决办法
5375
查看次数

多线程差异

我正在使用比较两个目录的内容diff

它在多线程系统上仅使用一个线程。有人知道一种必须diff使用多个 cpu/线程的方法吗?parallel也许使用?

diff gnu-parallel

7
推荐指数
1
解决办法
1718
查看次数

在 Ubuntu 上使用并行

我在尝试在 Ubuntu 10.04 上使用并行命令时遇到问题。我查看了并行文档,似乎运行的命令很少。在所有情况下,我只是在不采取任何操作的情况下返回命令提示符。例如,我试图使用 bzip2 压缩一堆文件


17:32 farhat HarshaNaveen$ parallel bzip2 ::: *fastq 
17:33 farhat HarshaNaveen$ ls *fastq|parallel bzip2 {}

这些命令都不起作用。也没有任何错误。man 文件中给出的示例虽然运行良好。


18:58farhat HarshaNaveen$ parallel sh -c "echo hi; sleep 2; echo bye" -- 1 2 3
hi
hi
hi
bye
bye
bye
18:58farhat HarshaNaveen$ 
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么?

gnu-parallel

6
推荐指数
1
解决办法
3813
查看次数

GNU Parallel 可以执行更多的并行进程吗?

例如,我可以执行:

parallel -j 200 < list0
Run Code Online (Sandbox Code Playgroud)

其中“列表”有:

nice -n -20 parallel -j 100 < list2
nice -n -20 parallel -j 100 < list1
Run Code Online (Sandbox Code Playgroud)

这是否可行/可能?

linux gnu-parallel

6
推荐指数
2
解决办法
9034
查看次数

标签 统计

gnu-parallel ×10

linux ×2

amazon-ec2 ×1

cluster ×1

diff ×1

files ×1

gnu ×1

hashsum ×1

ksh ×1

parallelism ×1

shell ×1

shell-script ×1

split ×1