lyao222lll的个人博客分享 http://blog.sciencenet.cn/u/lyao222lll

博文

多线程压缩工具pigz使用测试

已有 1289 次阅读 2019-4-28 19:19 |个人分类:Software/Pipeline/Script|系统分类:科研笔记| _实用小工具

多线程压缩工具pigz使用测试

 

接触测序行业也有2年多了(从学校第一次接触高通量测序开始算起),平时和fastq文件打交道也是家常便饭的事。我们知道,fastq文件还是蛮占存储空间的,因此一般都会将其压缩为gz格式保存。通常使用的软件就是gzip,但是这个软件不支持并行处理,因此对于体积较大的文件来讲,比如植物的基因组测序数据,通常都在几十G左右,压缩起来那是……相当费时啊。

尽管不单线程压缩怎么消耗资源,但是压缩时间长有时还是蛮让人头疼的一件事情,再加上有时想要尽可能节省空间,加大压缩比例的情况下。此外,有时在多线程任务中套着一步gzip压缩命令,还会导致所占用的CPU部分空闲,也不是一种合理利用资源的过程(尽管不消耗计算资源,但是自己没用到,别人也用不成,长时间占着也不是那么回事……)。然后就想,应该会有这种能支持多线程压缩的工具吧。然后一搜还真有,然后看到这个叫pigz的软件还不错。

 

pigz官网:http://zlib.net/pigz/

在页面中直接下载就可以了。

1.png

linux系统下,下载后解压,进入解压后的路径中直接“make”编译即可。编译完后,主程序pigz(压缩)和unpigz(解压缩,同样可使用命令 pigz -d作为替代)即出现在当前安装路径下,此时声明环境变量后就可以使用了。

#linux下,解压,编译安装
tar -xzvf pigz-2.4.tar.gz && cd pigz-2.4
make
 
#声明环境变量(可直接添加在 ~/.bashrc 中方便使用),例如我的安装路径在“/home/my/software/pigz-2.4”
export PATH=$PATH:/home/my/software/pigz-2.4/
 
#查看使用说明(在安装包中自带了说明文档“pigz.pdf”同样可供查看)
pigz -h

 看起来,除了支持gz格式,同样支持zip格式。

3.5.png


以下为使用测试。

我使用了一个约1.4G大小左右的fastq文件测试,压缩为gz格式,再解压缩回来。比较gzippigz的用时效率。

除了线程数之外,gzip以及pigz的其余参数均为默认参数。

#压缩测试
#可分别使用 gzip 和 pigz 执行压缩,均使用各软件默认的压缩比例,且其它参数也默认
gzip -c test.fastq > test_gizp.fastq
pigz -p 1 -c test.fastq > test_pigz.fastq.gz
pigz -p 2 -c test.fastq > test_pigz.fastq.gz
pigz -p 4 -c test.fastq > test_pigz.fastq.gz
pigz -p 6 -c test.fastq > test_pigz.fastq.gz
pigz -p 8 -c test.fastq > test_pigz.fastq.gz
pigz -p 10 -c test.fastq > test_pigz.fastq.gz
 
#解压缩测试,均使用上述 gzip 压缩后的文件(目的为统一文件大小),其它参数默认
#gzip -d 或者 gunzip 均可以实现解压缩
#pigz -d 或者 unpigz 均可以实现解压缩
gunzip -c test_gzip.fastq.gz > test.fastq
pigz -p 1 -dc test_gzip.fastq.gz > test.fastq
pigz -p 2 -dc test_gzip.fastq.gz > test.fastq
pigz -p 4 -dc test_gzip.fastq.gz > test.fastq
pigz -p 6 -dc test_gzip.fastq.gz > test.fastq
pigz -p 8 -dc test_gzip.fastq.gz > test.fastq
pigz -p 10 -dc test_gzip.fastq.gz > test.fastq

测试用时统计如下。

2.png

使用默认参数,文件压缩后的大小统计。

3.png

综上可以看出,若未添加额外的参数,在两个软件默认的压缩比例下,所得压缩文件的大小几乎差不了多少,但是使用pigz执行多线程压缩的效率会显著提升。不过随着线程数的增加,这种时间上的节省效率会越来越低,而且毕竟多线程下对CPU也是一种负担会显得浪费资源。因此建议对于一般大小的文件(例如1G左右的fastq文件,常见于微生物基因组测序数据),使用pigz2-4线程下压缩就完全可以了,既高效又合理利用资源。对于较大的文件(例如几十G左右的fastq文件,常见于植物基因组测序数据),或者增大压缩比例时(此时也比较费时间),则可以适当的增加线程数,例如在8-10个线程左右,是完全可行的。

而对于解压缩,测试效果似乎没那么明显。首先我们知道毕竟解压缩相较于压缩没那么复杂,常规的gunzip对于小文件的解压缩还是很快的;其次我选的测试文件也不大比较不出二者的区别。事实上,即便是较大的数据(例如十几或几十个Gfastq文件),解压缩起来似乎也没那么费时间(当然,压缩起来可能就是另外一回事了),一般情况下gunzip就可以满足需求了。因此,在这里不是很推荐使用pigz解压缩偏小的文件,大文件或者对于已知压缩比相对较高的文件则可以考虑用它,线程数也别设置太大4个以内肯定足够了。

 



http://blog.sciencenet.cn/blog-3406804-1176006.html

上一篇:ggplot2绘制圆环图示例
下一篇:群落多样性分析中常见Alpha多样性指数简介

1 王玲玲

该博文允许注册用户评论 请点击登录 评论 (0 个评论)

数据加载中...
扫一扫,分享此博文

Archiver|手机版|科学网 ( 京ICP备07017567号-12 )

GMT+8, 2020-8-12 18:22

Powered by ScienceNet.cn

Copyright © 2007- 中国科学报社

返回顶部