ホワイトペーパー Hadoop LZO 圧縮機能の検証 対象 Apache Hadoop 対象バージョン Apache Hadoop 0.20.203.0 / LZO 2.03 概要 本書は Hadoop の処理対象データを LZO 形式で圧縮した場合 処理時間 と HDFS 使用量 の関係と効果について確認する事を目的として実施した 検証の内容 およびその結果を記載したものです 検証の結果 LZO 圧縮を使用することで HDFS により多くのデータを格納するとともに Map/Reduce の処理時間短縮 ならびに HDFS へのデータインポート / エクスポート時間の短縮が期待できます 前提条件など Hadoop の概要を理解していること 開示範囲 一般 本書のご利用に関して 本ドキュメントは作成時点の最新情報を基に記載しています ご使用機器の OS バージョン等必ずご確認の上でご活用をお願いいたします また 本書の正確さに最大限の努力をはらっていますが 本書の無謬性 その他について一切保証はいたしません 本書の利用に基づくいかなる結果 損害にも責任を負いかねますので ご了承ください 文書名... Hadoop LZO 圧縮機能の検証リビジョン... 1 初版... 2012/01/30 All rights reserved, 2012, Hitachi Solutions, Ltd.
目次 1 はじめに... 3 1.1 検証の目的... 3 1.2 圧縮形式... 3 2 検証作業概要... 4 2.1 LZO 圧縮の使用の流れ... 4 2.2 検証の観点... 4 3 検証環境... 5 3.1 システム構成... 5 3.2 システム構成詳細... 5 3.3 検証用データとMap/Reduceアプリケーション... 5 4 検証結果... 6 4.1 HDFS 使用量... 6 4.2 処理時間... 7 4.3 Map/Reduce 処理時間のi/o wait 率... 8 4.4 参考情報 ( データ圧縮処理時間 )... 9 5 考察... 10 5.1 圧縮時間... 10 6 結論... 12 6.1 HDFS 容量の効率的活用... 12 6.2 処理時間の短縮... 12 6.3 システム全体 運用の最適化... 12 2 Hadoop LZO 圧縮機能の検証
1 はじめに 日立ソリューションズでは オープンソース分散処理基盤 Apache Hadoop ( 以下 Hadoop ) の導入をご検討されているお客様向けに 実機検証 / アセスメント支援から 構築 運用時における環境構築 / アプリケーション開発 製品保守サポートまでワンストップでのサービスをご提供しています この度 Hadoop 関連技術 ノウハウ蓄積の一環として LZO 圧縮を使用した動作検証を実施しました 本書では この動作検証の背景 目的から 検証結果について纏めます 1.1 検証の目的 HDFS に格納するデータの圧縮による効果と目的を以下に示します HDFS 容量の効率的活用 格納するファイルを圧縮し クラスタ全体のハードディスク容量を効率的に活用することで よりおおくのデータを HDFS に格納できることが期待されます ( 図 1.1 ) 処理時間の短縮 Hadoop で処理を行うデータサイズが圧縮により小さくなるため インポート / エクスポート時間および Map/Reduce 処理時間の短縮が期待できます データサイズの縮小は ネットワーク帯域の効率的活用にもつながります 上記のパフォーマンス向上 および Hadoop を使用したデータ処理時間の全体的な短縮が実際に可能かを確認するため マスタ スレーブノート計 12 台の検証環境を作成し動作検証を行いました 図 1.1 1.2 圧縮形式 圧縮形式には gzipやbzip2 など様々な形式がありますが 今回の検証ではApache Hadoop 0.20 系のバージョンでMap/Reduceのスプリット機能を早い段階からサポートしているLZO 形式 1 に注目し検証しました Hadoopの LZO 対応ライブラリは GPLライセンスであるため Apache Hadoop 0.20.203 には同梱されていません Hadoopを LZO 圧縮データに対応させるためには 別途ソース 2 を入手し設定を行う必要があります 1 今回の検証で利用したパッケージは lzo-2.03-3.1.el6.x86_64( 及び関連するパッケージ ) です 2 詳細は http://wiki.apache.org/hadoop/usinglzocompression を参照下さい All rights reserved, 2012, Hitachi Solutions, Ltd. 3
2 検証作業概要 本章では Hadoop で LZO 圧縮されたデータを使用する際の簡単な説明 および検証の観点や検証作業の流れなど実施した検証について記載します 2.1 LZO 圧縮の使用の流れ LZO 圧縮を使用する場合は HDFS にデータをインポートした後 Map/Reduce 処理がスプリットに対応できるよう インデックスファイルを作成する必要があります データの流れを 図 2.1 に示します 図 2.1 1 圧縮 LZO を使用して データの圧縮を行います 2 インポート 1で圧縮したデータを HDFS へインポートします 3 インデックスファイルの生成 hadoop コマンドを使用して インデックスファイルを生成します コマンドの例を以下に示します hadoop jar ${JAR_PATH}/hadoop-lzo-X.X.X.jar com.hadoop.compression.lzo.distributedlzoindexer /lzo_files 4 Map/Reduce 処理 圧縮ファイルおよびインデックスファイルをインプットデータとして Map/Reduce 処理を実行します 2.2 検証の観点 今回の検証では主に HDFS 使用量と処理時間に着目し 非圧縮時と圧縮時の比較を行いました 具体的には 圧縮を利用した場合の HDFS 使用量と 以下の 表 2.1 に示す各処理における処理時間を測定し 比較しました 表 2.1 区分 非圧縮時 圧縮時 備考 1 インポート 2 インデックスファイル作成 - 3 Map/Reduce 処理の実行 : 測定 -: 非該当 4 Hadoop LZO 圧縮機能の検証
3 検証環境 本章では 検証環境の詳細について記載します 3.1 システム構成 本検証用に構築した環境のシステム構成は 図 3.1 の通りです 図 3.1 3.2 システム構成詳細 利用した検証環境のマシンやバージョン等は 表 3.1 の通りです 表 3.1 項目 内容 1 機種 Hitachi HA8000-bd/BD10 2 CPU Intel(R) Core(TM) i5 CPU 3 HW メモリ DDR3 SDRAM(PC3-8500) 4GB 4 マスタ系ノード Client 500GB HDD 5 スレーブノード 750GB 6 OS CentOS 6.1 7 JDK 1.6.0_27 8 Hadoop Hadoop 0.20.203.0 設定は 基本的にデフォルト ( レプリケーション数 :3) 3.3 検証用データと Map/Reduce アプリケーション約 100GB 3 のデータを用意し ターゲットレコード (TARGETID) を検索するMap/Reduceアプリを使用しました データのレコード形式 ( サンプル ) を以下に示します 1970/01/01 09:00:00,user-415,AAAAAAAAAAAAAAAAAAAA-10.0.55.51:17337 1970/01/01 09:33:19,TARGETID,AAAAAAAAAAAAAAAAAAAA-10.0.12.58:16114 3 データサイズは 約 10GB 10 ファイル = 約 100GB です レコード数は 158,540,014 件 10( ファイル数 )= 計 1,585,400,140 件で その中にターゲットレコードは 14 10( ファイル数 )=140 件含まれています All rights reserved, 2012, Hitachi Solutions, Ltd. 5
4 検証結果 本章では 検証結果について記載します 4.1 HDFS 使用量 LZO 圧縮を使用して約 100GB のデータを圧縮したところ 約 22GB となり 22% まで圧縮されました Hadoop コマンド 4 を使用して Hadoop に認識されている HDFS の使用容量を取得したところ 表 4.1 の結果となりました 今回の検証では レプリケーション数をデフォルトの 3 に設定してあるため インポート後のデータ量が約 3 倍の値になっています 表 4.1 項目 非圧縮 圧縮 備考 1 Configured Capacity(GB) 6853 GB 6853 GB 2 DFS Used(GB) 302 GB 65 GB 約 79% 削減 3 DFS Used(%) 5 % 1 % データインポート後の HDFS 使用量を平均値でグラフにしたところ 図 4.1 のようになりました 図 4.1 上記のデータから以下のことが分かります HDFS の使用量が LZO 圧縮を使用することで 非圧縮時にくらべて 5 分の 1 に縮小されている 4 hadoop dfsadmin report コマンドで取得したデータです (5 回計測の平均値 ) 6 Hadoop LZO 圧縮機能の検証
4.2 処理時間 各処理時間は 表 4.2 5 および 表 4.3 の結果となりました 表 4.2 区分 非圧縮 圧縮 備考 1 インポート 0:28:44 0:06:56 21 分 48 秒削減 2 インデックスファイル作成 0:06:01 6 分 01 秒追加 3 Map/Reduce 処理の実行 0:16:47 0:10:21 6 分 26 秒削減 合計 0:45:31 0:23:18 22 分 13 秒削減 (49% 削減 ) 表 4.3 区分 ケース 1 回目 2 回目 3 回目 4 回目 5 回目 平均 1 インポート 非圧縮 0:28:48 0:28:47 0:28:23 0:28:33 0:29:07 0:28:44 圧縮 0:06:40 0:06:30 0:06:32 0:07:11 0:07:48 0:06:56 2 インデックスファイル作成 非圧縮 - - - - - - 圧縮 0:05:54 0:06:03 0:06:00 0:06:08 0:06:00 0:06:01 3 Map/Reduce 処理の実行 非圧縮 0:16:45 0:16:50 0:16:44 0:16:54 0:16:44 0:16:47 圧縮 0:10:19 0:10:22 0:10:22 0:10:19 0:10:22 0:10:21 Map/Reduce 処理時間を平均時間でグラフにしたところ 図 4.2 のようになりました 図 4.2 上記の結果から 以下のことがわかります Map/Reduce 処理時間が LZO 圧縮を使用することで非圧縮時の約 60% まで短縮されている 5 圧縮 非圧縮時で それぞれ 5 回連続で実施して取得したデータです All rights reserved, 2012, Hitachi Solutions, Ltd. 7
4.3 Map/Reduce 処理時間の i/o wait 率 Map/Reduce 処理中の 各スレーブノードの CPU における i/o wait 率 6 は 表 4.4 の様な結果となりました なお 表 4.4 は サンプルとして 1 回目の測定値を表にまとめたものです 2-5 回の測定値も同様の値です 表 4.4 slave 毎の i/o wait 非圧縮 圧縮 備考 1 001 5.56 % 1.42 % 2 002 4.46 % 1.11 % 3 003 5.32 % 1.34 % 4 004 4.17 % 1.43 % 5 005 4.75 % 1.14 % 6 006 4.62 % 1.23 % 7 007 4.68 % 1.37 % 8 008 3.46 % 1.22 % 9 009 4.30 % 1.18 % 10 010 5.20 % 1.17 % 平均 4.65 % 1.26 % 73% 改善 i/o wait 率をグラフにしたところ 以下の 図 4.3 のようになりました 図 4.3 上記の結果から以下のことが分かります Map/Reduce 処理における i/o wait が LZO 圧縮を使用することで非圧縮時の約 27% まで小さくなっている 6 sysstat の sar コマンドで取得した %iowait の値です 8 Hadoop LZO 圧縮機能の検証
4.4 参考情報 ( データ圧縮処理時間 ) 今回の検証で データを LZO 形式で圧縮しました 圧縮時間は ハードウェアのスペックに大きく依存する為 参考値として結果を 表 4.5 に示します 表 4.5 区分 1 回目 2 回目 3 回目 平均 1 圧縮時間 0:20:28 0:20:31 0:20:11 0:20:23 データ圧縮に利用したマシンやバージョン等は 表 4.6 の通りです 表 4.6 項目 内容 1 機種 Hitachi HA8000 TS20AJ 2 CPU Xeon X5570 x 2 (Quad Core 2.93Hz) HW 3 メモリ DDR3-1333(PC3-10600) 48GB(8GBx6) 4 HDD SAS 300GB x 8 RAID5(7D1P) LSIMegaRAID 5 OS CentOS 6.1 All rights reserved, 2012, Hitachi Solutions, Ltd. 9
5 考察 本章では 検証によって得られたデータに対する考察を記載します 5.1 圧縮時間 表 4.2 のデータから 今回の検証環境においてインポートから Map/Reduce 処理の実行までの平均時間の和を比較すると 非圧縮時が 45 分 31 秒 圧縮時が 23 分 18 秒と約 1/2 となり 図 5.1 のように処理時間短縮効果を得ることができています 図 5.1 なお 4.4 章の参考値を利用し クライアントでのデータ圧縮時間まで含めたトータル時間は 43 分 41 秒となり 非圧縮時の 45 分 31 秒に対し 5% 程度の時間短縮となります データ圧縮処理は ハードウェアスペックに大きく依存します 高性能なマシンを用いる事で 全体処理時間をより短縮する効果は期待できます 図 5.2 図 5.2 圧縮時間 ( 参考値での仮定 ) 10 Hadoop LZO 圧縮機能の検証
また 本検証のような検索システムの場合 圧縮 インポート およびインデックスファイル作成は初回のみ行われます 検索処理 (Map/Reduce 処理 ) のみが 用途に応じて複数回実行されるため 非常に大きな処理時間短縮効果を期待することができます 今回の検証環境において 10 回ターゲットレコードを検索した場合の処理時間比較を 図 5.3 に示します 図 5.3 All rights reserved, 2012, Hitachi Solutions, Ltd. 11
6 結論 上記の検証結果および考察から LZO 圧縮の使用に関して以下の結論を出しました 6.1 HDFS 容量の効率的活用 LZO 圧縮の利用により 非使用時に比べ最大で約 5 倍のデータを格納でき HDFS の効率的活用が可能となる HDD 容量のスケールアップや Hadoop システムのスケールアウト以外のデータ格納容量の拡張手段の 1 つとして LZO 圧縮の利用が可能となる 利用方法や設定も システム構成や運用に影響を与えにくく 容易である 6.2 処理時間の短縮 インポート処理から Map/Reduce 処理時間の短縮が期待できる 全体的な処理時間で LZO 圧縮利用が有効か否かは 圧縮 解凍時間に依存する 圧縮時間は マシン性能の依存度が高い 6.3 システム全体 運用の最適化 圧縮率の高いデータの場合 HDFS 容量 処理時間 システム全体の効率改善が得られ易い また データ圧縮処理自体を高スペックのマシンで実施する事で より高い改善が得られ易い HDFS 配置済データの再利用率が高いジョブ実行となる運用では 乗数的に効果を得られ易い データ自体のサイズ縮小により インポート / エクスポート時などのネットワーク帯域の占有時間やトラフィックをデータ縮小率相当低減することが可能となる 以上 12 Hadoop LZO 圧縮機能の検証