Hadoopは、以下のファイルを圧縮することができます。
Hadoopジョブの入出力となるDFS上のファイル
MapReduce作業領域に入出力される作業ファイル
これらのファイルを圧縮することでDFSやMapReduce作業領域のディスク容量を節約したり、入出力量を削減することで入出力負荷を低減したりすることができます。一方で圧縮によりCPU負荷は増加しますので、Hadoopジョブの処理特性により圧縮の有無を選択します。
DFS上のファイルの圧縮
DFS上のファイルを圧縮する方法には以下の二つがあります。P-DFSの機能による圧縮を推奨します。
P-DFSの機能による圧縮
Hadoopの機能による圧縮
P-DFSの機能による圧縮はファイルシステム内部で圧縮・伸張を行っており、利用者やアプリケーションから圧縮ファイル・非圧縮ファイルを意識することなく扱うことができます。また、圧縮ファイルをHadoopジョブの入力にした場合でも分散処理を行うことができます。
参照
P-DFSの機能による圧縮の詳細は、「Primesoft Distributed File System for Hadoop V1 ユーザーズガイド」を参照してください。
圧縮機能の利用方法については、「10.1 入出力データの準備」を参照してください。
一方、Hadoopの機能による圧縮はソフトウェアにより圧縮・伸張を行っているため、利用者やアプリケーションは圧縮ファイルであることを意識する必要があります。たとえばHadoopジョブの処理結果を圧縮ファイルとして出力した場合、以降そのファイルを参照するアプリケーション等で伸長処理が必要です。また、後述する圧縮コーデックによっては圧縮ファイルをHadoopジョブの入力にした場合に効率的な分散処理が行えず、1つの圧縮ファイルが1つプロセスで実行されることがあります。
Hadoopの機能による圧縮は、以下のプロパティで指定します。
mapred.compress.output
Hadoopジョブの出力ファイルを圧縮する否かをbool値で指定します。
参考
本製品でのデフォルトの指定値は以下のとおりです。
mapred.compress.output=false (mapred-site.xml)
作業ファイルの圧縮
作業ファイルの圧縮は、ソフトウェアにより圧縮・伸張を行っています。DFS上のファイルの圧縮と異なりHadoopが内部的に圧縮・伸長を行うため、利用者やアプリケーションから意識する必要はありません。
作業ファイルを圧縮の有無は、以下のプロパティで指定します。
mapred.compress.map.output
作業ファイルを圧縮するか否かをbool値で指定します。
参考
本製品でのデフォルトの指定値は以下のとおりです。
mapred.compress.map.output=true (mapred-site.xml)
圧縮アルゴリズム
P-DFSの機能による圧縮は、Red Hat(R) Enterprise Linux(R)に標準で搭載されDEFLATEアルゴリズムを使用したzlib形式により圧縮・伸長を行います。
ソフトウェアによる圧縮では、圧縮アルゴリズムを複数の圧縮コーデックから選択することができます。
org.apache.hadoop.io.compress.DefaultCodec
DEFLATEアルゴリズムを使用したzlib形式により圧縮・伸長を行います。
圧縮ファイルを分散して処理することはできません。
org.apache.hadoop.io.compress.GzipCodec
DEFLATEアルゴリズムを使用したgzip形式により圧縮・伸長を行います。
圧縮ファイルを分散して処理することはできません。
圧縮ファイルをgzipコマンドにより参照することができます。
org.apache.hadoop.io.compress.BZip2Codec
bzip2アルゴリズムを使用したbzip2形式により圧縮・伸長を行います。
圧縮ファイルを分散して処理することができますが、圧縮・伸長処理の性能は劣ります。
圧縮ファイルをbzip2コマンドにより参照することができます。
org.apache.hadoop.io.compress.SnappyCodec(未サポート)
Google社が開発した、Snappyアルゴリズムを使用したSnappy形式により圧縮・伸長を行います。
圧縮ファイルを分散して処理することはできませんが、圧縮・伸長処理は高速です。
使用する場合は、別途利用者がインターネットからSnappy用のネイティブライブラリ(.so)を入手しインストールする必要があります。本製品では未サポートです。
圧縮コーデックは、以下のプロパティで指定します。
mapred.output.compression.codec
Hadoopジョブの出力ファイルを圧縮する場合に使用する圧縮コーデックのクラス名を指定します。
mapred.map.output.compression.codec
作業ファイルを圧縮する場合に使用する圧縮コーデックのクラス名を指定します。
参考
本製品でのデフォルトの指定値は以下のとおりです。
mapred.output.compression.codec=org.apache.hadoop.io.compress.DefaultCodec (mapred-site.xml) mapred.map.output.compression.codec=org.apache.hadoop.io.compress.DefaultCodec (mapred-site.xml)