文書名 ... Hadoop LZO 圧縮機能の検証 リビジョン ... 1 初版 ... 2012/01/30
ホワイトペーパー
Hadoop LZO 圧縮機能の検証
対象 Apache Hadoop対象バージョン Apache Hadoop 0.20.203.0 / LZO 2.03
概要 本書は、Hadoop の処理対象データを LZO 形式で圧縮した場合、「処理時間」と「HDFS 使用量」の関係と効果について確認する事を目的として実施した、検証の内容、およびそ の結果を記載したものです。 検証の結果、LZO 圧縮を使用することで HDFS により多くのデータを格納するとともに、 Map/Reduce の処理時間短縮、ならびに HDFS へのデータインポート/エクスポート時間 の短縮が期待できます。 前提条件など Hadoop の概要を理解していること。 開示範囲 一般 ■ 本書のご利用に関して 本ドキュメントは作成時点の最新情報を基に記載しています。ご使用機器の OS バージョン等必ずご確認の上でご活用をお願いいたします。 また、本書の正確さに最大限の努力をはらっていますが、本書の無謬性、その他について一切保証はいたしません。 本書の利用に基づくいかなる結果、損害にも責任を負いかねますので、ご了承ください。
目次
1
はじめに
... 3
1.1 検証の目的 ... 3 1.2 圧縮形式 ... 32
検証作業概要
... 4
2.1 LZO圧縮の使用の流れ ... 4 2.2 検証の観点 ... 43
検証環境
... 5
3.1 システム構成 ... 5 3.2 システム構成詳細 ... 5 3.3 検証用データとMap/Reduceアプリケーション ... 54
検証結果
... 6
4.1 HDFS使用量 ... 6 4.2 処理時間 ... 7 4.3 Map/Reduce処理時間のi/o wait率 ... 8 4.4 参考情報(データ圧縮処理時間) ... 95
考察
... 10
5.1 圧縮時間 ... 106
結論
... 12
6.1 HDFS容量の効率的活用 ... 12 6.2 処理時間の短縮 ... 12 6.3 システム全体・運用の最適化 ... 121
はじめに
日立ソリューションズでは、オープンソース分散処理基盤「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
検証作業概要
本章では、Hadoop で LZO 圧縮されたデータを使用する際の簡単な説明、および検証の観点や検証作業の流 れなど実施した検証について記載します。2.1 LZO 圧縮の使用の流れ
LZO 圧縮を使用する場合は、HDFS にデータをインポートした後、Map/Reduce 処理がスプリットに対応できるよ う、インデックスファイルを作成する必要があります。データの流れを【図 2.1】に示します。 【図 2.1】 ① 圧縮 LZO を使用して、データの圧縮を行います。 ② インポート ①で圧縮したデータを HDFS へインポートします。 ③ インデックスファイルの生成 hadoop コマンドを使用して、インデックスファイルを生成します。コマンドの例を以下に示します。 ④ Map/Reduce 処理 圧縮ファイルおよびインデックスファイルをインプットデータとして Map/Reduce 処理を実行します。2.2 検証の観点
今回の検証では主に HDFS 使用量と処理時間に着目し、非圧縮時と圧縮時の比較を行いました。具体的には、 圧縮を利用した場合の HDFS 使用量と、以下の【表 2.1】に示す各処理における処理時間を測定し、比較しまし た。 【表 2.1】 ♯ 区分 非圧縮時 圧縮時 備考 1 インポート ○ ○ 2 インデックスファイル作成 - ○ 3 Map/Reduce 処理の実行 ○ ○ ○:測定 -:非該当 hadoop jar ${JAR_PATH}/hadoop-lzo-X.X.X.jar com.hadoop.compression.lzo.DistributedLzoIndexer /lzo_files3
検証環境
本章では、検証環境の詳細について記載します。3.1 システム構成
本検証用に構築した環境のシステム構成は、【図 3.1】の通りです。 【図 3.1】3.2 システム構成詳細
利用した検証環境のマシンやバージョン等は【表 3.1】の通りです。 【表 3.1】 ♯ 項目 内容 1 HW 機種 Hitachi HA8000-bd/BD102 CPU Intel(R) Core(TM) i5 CPU
3 メモリ DDR3 SDRAM(PC3-8500) 4GB 4 HDD マスタ系ノード・Client 500GB 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 アプリケーション
約 100GB3 3 データサイズは、約 10GB×10 ファイル=約 100GB です。レコード数は、158,540,014 件×10(ファイル数)=計 1,585,400,140 件で、その中 にターゲットレコードは 14×10(ファイル数)=140 件含まれています。 のデータを用意し、ターゲットレコード(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:161144
検証結果
本章では、検証結果について記載します。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.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回連続で実施して取得したデータです。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%まで小さくなっている。
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 HW機種 Hitachi HA8000 TS20AJ
2 CPU Xeon X5570 x 2 (Quad Core 2.93Hz)
3 メモリ DDR3-1333(PC3-10600) 48GB(8GBx6)
4 HDD SAS 300GB x 8 RAID5(7D1P) LSIMegaRAID
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】 圧縮時間 (参考値での仮定)また、本検証のような検索システムの場合、圧縮、インポート、およびインデックスファイル作成は初 回のみ行われます。 検索処理(Map/Reduce 処理)のみが、用途に応じて複数回実行されるため、非常に大きな処理時間短縮 効果を期待することができます。 今回の検証環境において、10 回ターゲットレコードを検索した場合の処理時間比較を【図 5.3】に示し ます。 【図 5.3】