Hadoop(ハドゥープ)は複数のサーバーでクラスターを構成し、MapReduceという実行環境や、HDFS(Hadoop Distributed File System)という分散ファイルシステムなどによって、効率的な並列分散処理を実現するミドルウエアである。

 MapReduceでは、データを整理・抽出するMapタスク、Mapタスクの出力を基にデータを集計するReduceタスクを、クラスターの各ノードで分散処理することで性能を高める。

 現状では、Hadoopは主にログ分析やBI(Business Intelligence)に使用され、大量データを分析するための基盤ソフトと理解されることも多いが、それにとどまらず企業の基幹システムを大きく変える可能性を持っている。

 Hadoopは分散処理を容易かつ高速に実現するため、割り切った作りになっている。基本的に処理中のデータの外部からの更新や複雑な関連性を持つデータ群の処理は得意ではなく、OLTP(Online Transaction Processing)には向かない。

 しかし、大量データに対して同一の計算を繰り返したり、集計したりする処理には最適である。基幹システムでは、次の二つのメリットが得られる。

(1)高速にバッチを実行
 Hadoopは安価・高速にバッチを実行するプラットフォームになり得る。数ノードでも、RDBMSを使ったシステムの10倍以上の性能が得られ、業務時間の短縮にとどまらず、業務のやり方まで変える可能性がある。

(2)大量のデータを処理
 RDBMSはスケールアウトが難しく、大量のデータを扱う場合、ハードウエアコストが上がり、そこが実質的な限界点になる。しかしHadoopはスケールアウトが容易なアーキテクチャーを採用しており、RDBMSの限界となる規模の数十倍以上のデータを処理できる。

 こうしたメリットを今回は、小売業の買掛計上処理を模したテストプログラムを作成して検証した(図1)。

図1●今回実施した検証の内容と結果<br>基幹システムで行う買掛残高更新のバッチ処理をベースにHadoopの実力を検証した
図1●今回実施した検証の内容と結果
基幹システムで行う買掛残高更新のバッチ処理をベースにHadoopの実力を検証した
[画像のクリックで拡大表示]

 まず、扱うデータ量が1000万件と多い場合、Hadoopを使ったシステムのスループット(性能)は12ノードまでほぼ比例して向上した(検証(1))。

 併せてHadoopのシステムで重要になるデータのインポートに最適な方法を明らかにしている(検証(2))。

 また、キー分布の偏りという現象で性能がスケールアウトしないときは、対策によって改善できることを示した(検証(3))。対策しない場合に比べて性能が80.8%向上している。

 最後に、複数のジョブを同時実行すると、単独実行に比べて性能が上がることを確かめた(検証(4))。単独実行に比べて54.1%向上している。

 以下では、検証方法を説明した後、各検証結果の詳細を解説する。

スレーブノードで分散処理

 まず検証方法について説明しよう。Hadoopのシステムで実行する処理の概要を図1下に示す。RDBMSを使って構築したオープン系の基幹システムからデータを取り出し、Hadoopのシステムでデータを更新するというもので、以下の四つの処理から成る。

(a)インポート:基幹システムのRDBMSからHadoopの分散ファイルシステムHDFSへデータを読み込む。

(b)仕入データ更新:HadoopのMapReduce処理1で仕入データを加工し、中間(WORK)データを出力する。

(c)買掛残高更新:中間データを取引先や締め日ごとに集計して、MapReduce処理2で買掛残高を算出し、インポートした買掛残高を更新する。

(d)エクスポート:更新した買掛残高をRDBMSへ書き戻す。

 検証環境は図2のようになる。Hadoopクラスターの管理を行うマスターノード、処理データを保管するRDBMS、MapReduce処理1および同2を実行するスレーブノードがあり、それぞれを仮想化ホスト上の仮想サーバーで動作させた。仮想化ホスト1台で最大3台の仮想サーバーを稼働させ、マスターノード用に1台、スレーブノード用に最大4台の仮想化ホストを利用した。

図2●今回検証に使った環境<br>Hadoopクラスターの管理を行うマスターノード、処理データを保管するRDBMS、MapReduce処理1および同2を実行するスレーブノードがあり、それぞれを仮想化ホスト上の仮想サーバーで動作させた
図2●今回検証に使った環境
Hadoopクラスターの管理を行うマスターノード、処理データを保管するRDBMS、MapReduce処理1および同2を実行するスレーブノードがあり、それぞれを仮想化ホスト上の仮想サーバーで動作させた
[画像のクリックで拡大表示]