Hadoopチューニング >

概要

  • Hadoop上での各圧縮形式の特性を確認するための簡単なテストです。
  • テストの内容については、最後のテストの詳細をご参照ください。

入力データ圧縮

  • 全く同じデータを各アルゴリズムで圧縮したものを入力データとしています。特にジョブ実行時間とMapタスク数に着目しています。
  • データからは Bzip2 がベストですが、この場合は伸張スピードしか関係しませんので、圧縮スピードが比較的低速な Bzip2 の利用では運用全体も考慮に入れる必要があります。一般的にLZO が推奨されるのは、全体のバランスの良さからです。
    No.入力データ圧縮データ総量(ブロック数)ジョブ実行時間Map数詳細(2回試行)備考
    1なし1.48GB(24)08:0624filemapout_no_compress001.png
    filemapout_no_compress002.png
    2あり(LZO)*1315.67MB(5)06:325fileinput_lzo_compress001.png
    fileinput_lzo_compress002.png
    3あり(Gzip)197.51MB(4)09:581fileinput_gzip_compress001.png
    fileinput_gzip_compress002.png
    Gzipは分割不可なので
    Map数が1になることに注意
    4あり(Bzip2)137.35MB(3)06:133fileinput_bzip2_compress001.png
    fileinput_bzip2_compress002.png
  • ジョブは Pig で記述し、ロード部分以外は同様です。ロード部分の差異は以下の通りです。
    1. Gzip と Bzip2 については、ファイルパスを変更するだけでほぼ透過的に記述できます。
      1. A = load '/user/hadoop/work/postcodes.x100.csv' using PigStorage(',');
      2. -- Gzip
      3. A = load '/user/hadoop/work/postcodes.x100.csv.gz' using PigStorage(',');
      4. -- Bzip2
      5. A = load '/user/hadoop/work/postcodes.x100.csv.bz2' using PigStorage(',');
    2. LZO についてはローダの変更が必要となり、今回は Elephant Bird のそれを利用しています。依存ライブラリはもう少し整理すべきでしょう。
      1. register /local/path/to/hadoop-lzo-0.4.4.jar;
      2. register /local/path/to/elephant-bird-1.0.jar;
      3. register /local/path/to/google-collect-1.0.jar;
      4. A = load '/user/hadoop/work/postcodes.x100.csv.lzo'
      5. using com.twitter.elephantbird.pig.load.LzoTokenizedLoader(',');

出力データ圧縮

  • データのロード部分などは同一で、出力の圧縮形式のみを変更しています。
  • LZO圧縮の利用がおすすめです。
    No.出力データ圧縮出力データ総量ジョブ実行時間詳細(2回試行)備考
    1なし20.86KB08:11fileoutput_no_compress001.png
    fileoutput_no_compress002.png
    2あり(LZO)11.18KB07:35fileoutput_lzo_compress001.png
    fileoutput_lzo_compress002.png
    3あり(Bzip2)6.12KB08:34fileoutput_bz2_compress001.png
    fileoutput_bz2_compress002.png
  • ジョブは Pig で記述し、ストア部分以外は同様です。ストア部分の差異は以下の通りです。
    1. Bzip2 については、ファイルパス(拡張子)を変更するだけでほぼ透過的に記述できます。なお、Gzip については、Pig ではサポートされていません。
      1. store X into '/user/hadoop/work/postcodes.output.csv' using PigStorage(',');
      2. store X into '/user/hadoop/work/postcodes.output.csv.bz2' using PigStorage(',');
    2. LZO についてはストレージ関数の変更が必要となり、今回は Elephant Bird のそれを利用しています。
      1. register /local/path/to/hadoop-lzo-0.4.4.jar;
      2. register /local/path/to/elephant-bird-1.0.jar;
      3. store X into '/user/hadoop/work/postcodes.output.csv.lzo'
      4. using com.twitter.elephantbird.pig.store.LzoTokenizedStorage(',');

Map出力圧縮

テストの詳細

概要

  • サンプルデータは、例によって郵便番号データを100倍に増やしたもので、無圧縮で1.48GBのサイズになります。
  • テストを容易にするため、すべてPigを用いて行っています。入出力では、圧縮形式によりPigの関数が変更になりますのでPigの影響が皆無とはいえませんが、結果を見る限りそれほど大きな影響はないようです。
  • 試行回数が少ないので、ジョブ実行時間は参考値程度ですが、複数回のテスト結果に開きがないことを確認しています。

テスト環境

No.項目内容備考
1CPUIntel Core Duo T2300 1.66GHz
2メモリ4GBただし、32bit環境。
3OSUbuntu 9.04
4JDKOpenJDK 6
5HadoopVer. 0.20.2, r911707、1台で擬似分散モード
6PigVer. 0.5.0

テストPigスクリプト

  • 以下がベースのPigスクリプトです。Map出力圧縮テストでは、スクリプトに変更はなくクラスタの設定のみ変更しています。入出力データ圧縮テストについては、それぞれ対応するロードあるいはストア(dumpから変更)部分の記述を変更して行っています。
    1. A = load '/user/hadoop/work/postcodes.x100.csv' using PigStorage(',')
    2. as (
    3.   org_code:chararray,
    4.   old_postcode:chararray,
    5.   postcode:chararray,
    6.   todoufuken_yomi:chararray,
    7.   shikuchoson_yomi:chararray,
    8.   choiki_yomi:chararray,
    9.   todoufuken:chararray,
    10.   shikuchoson:chararray,
    11.   choiki:chararray,
    12.   flag1:int,
    13.   flag2:int,
    14.   flag3:int,
    15.   flag4:int,
    16.   flag5:int,
    17.   flag6:int
    18. );
    19.  
    20. B = group A by org_code;
    21. X = foreach B generate group, COUNT(A);
    22.  
    23. dump X;

*1 Splittable LZO
*2 Gzipの圧縮アルゴリズムは Deflate なので、直ぐ上のzlib実装とヘッダ、フッタの分しか差がないのが分かります。

添付ファイル: filemapout_zlib_compress002.png 478件 [詳細] filemapout_zlib_compress001.png 485件 [詳細] fileoutput_lzo_compress002.png 453件 [詳細] fileoutput_lzo_compress001.png 491件 [詳細] fileoutput_bz2_compress002.png 460件 [詳細] fileoutput_bz2_compress001.png 483件 [詳細] fileoutput_no_compress002.png 449件 [詳細] fileoutput_no_compress001.png 477件 [詳細] fileinput_lzo_compress002.png 506件 [詳細] fileinput_lzo_compress001.png 641件 [詳細] filemapout_bzip2_compress002.png 464件 [詳細] filemapout_bzip2_compress001.png 499件 [詳細] fileinput_bzip2_compress002.png 534件 [詳細] fileinput_bzip2_compress001.png 585件 [詳細] fileinput_gzip_compress002.png 539件 [詳細] fileinput_gzip_compress001.png 684件 [詳細] filemapout_lzo_compress002.png 468件 [詳細] filemapout_lzo_compress001.png 484件 [詳細] filemapout_no_compress002.png 509件 [詳細] filemapout_no_compress001.png 697件 [詳細] filemapout_gzip_compress002.png 462件 [詳細] filemapout_gzip_compress001.png 518件 [詳細]

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2010-07-18 (日) 12:22:25 (3726d)