Y-Ken Studio

新しもの好きのデータエンジニアが四方山話をお届けします。

yumでインストール出来るpigzコマンドでマルチコア性能を生かした高速並列圧縮をする

ファイル・ディレクトリのgzip圧縮を行いたいが、1コアしか使われないので時間が掛かる。
待ちきれない。8コア以上のCPUを活かしてパラレルでgzip圧縮をしたい。そんな方に朗報です。
yum(rpm)でさくっとインストール出来る「pigz」を紹介します。

使い方

普段使っているtarコマンドに--use-compress-progオプションを併用し、pigzを指定します。

$ tar cf foo_document.tar.gz --use-compress-prog=pigz foo_document

MySQLのデータディレクトリ(/var/lib/mysql)を圧縮するなら以下のような書き方となります。

$ cd /var/lib
$ sudo tar cf /backup/mysql-YYYYMMDD.tar.gz --use-compress-prog=pigz mysql

topコマンドで見ると、以下のように、ものすごい勢いで圧縮していきます。爽快ですね。

f:id:yoshi-ken:20130519183224p:plain

インストール

面倒なコンパイル無しに利用できるのも良いところです。 epelリポジトリからyum install pigzで簡単にインストール出来ます。

$ sudo yum install pigz
Loaded plugins: etckeeper, fastestmirror, security
Loading mirror speeds from cached hostfile
epel/metalink                                            | 6.6 kB     00:00
 * atrpms: ftp.riken.jp
 * base: ftp.iij.ad.jp
 * epel: ftp.iij.ad.jp
 * extras: ftp.iij.ad.jp
 * rpmforge: ftp.riken.jp
 * updates: ftp.iij.ad.jp
atrpms                                                   | 3.5 kB     00:00
base                                                     | 3.7 kB     00:00
extras                                                   | 3.5 kB     00:00
groonga                                                  |  951 B     00:00
nginx                                                    | 2.9 kB     00:00
rpmforge                                                 | 1.9 kB     00:00
updates                                                  | 3.5 kB     00:00
Setting up Install Process
Resolving Dependencies
--> Running transaction check
---> Package pigz.x86_64 0:2.2.5-1.el6 will be installed
--> Finished Dependency Resolution

Dependencies Resolved

================================================================================
 Package         Arch              Version                Repository       Size
================================================================================
Installing:
 pigz            x86_64            2.2.5-1.el6            epel             41 k

Transaction Summary
================================================================================
Install       1 Package(s)

Total download size: 41 k
Installed size: 72 k
Is this ok [y/N]: y
Downloading Packages:
pigz-2.2.5-1.el6.x86_64.rpm                              |  41 kB     00:00
Running rpm_check_debug
Running Transaction Test
Transaction Test Succeeded
Running Transaction
etckeeper: pre transaction commit
  Installing : pigz-2.2.5-1.el6.x86_64                                      1/1
etckeeper: post transaction commit
  Verifying  : pigz-2.2.5-1.el6.x86_64                                      1/1

Installed:
  pigz.x86_64 0:2.2.5-1.el6

Complete!

まとめ

今回はgzip圧縮を並列実行して高速化するという実装である「pigz」を紹介しました。
bzip2(拡張子は.bz2)にも同様の並列実行実装が存在しますので、そこはお好みで。

  • gzipを並列実行するなら「pigz
    特徴:高速だが低圧縮 / 拡張子:gz

  • bzip2を並列実行するなら「pbzip2
    特徴:低速だが高圧縮 / 拡張子:bz2

参考サイト