Hadoopは、グーグルが検索エンジン用に開発したバッチ処理システムを基に開発された、オープンソースソフトだ。グーグルが開発した分散ファイルシステム「Google File System(GFS)」を模した「Hadoop Distributed File System(HD FS)」と、データ処理機構「MapReduce」を模した「Hadoop MapReduce」で構成する。

 米国では米VISAや米JPモルガン・チェースのような大手金融機関が、バッチ処理にHadoopを使用する。

 そのHadoopがいよいよ、日本企業でも使われ始めた。例えば楽天は、ある商品に対するお薦め商品をリストアップする「レコメンド処理」にHadoopを使用する。NTTデータは、全国の渋滞情報をリアルタイムに可視化するシステムの構築にHadoopを採用した。三菱UFJインフォメーションテクノロジーもHadoopを使ったバッチ処理フレームワークの開発を進めている。

大量のPCサーバーを連携

 Hadoopの仕組みをみよう。分散ファイルシステムのHDFSは、ファイルをブロックに分割して、複数のサーバーに配置する。MapReduceは、データ抽出と分解を行う「Map処理」と、抽出・分解したデータを集約して計算する「Reduce処理」の組み合わせでデータを処理する。

 図1は、Hadoopを使ってテキスト内の文字数を数えた場合の概念図だ。Map処理では、データに含まれる文字を抽出し、「キー:値」の形式に分解する。続くReduce処理では、キーを元にデータを集約して計算を行う。

図1●Hadoopの仕組み
Hadoopは、データの保存先である「Hadoop Distributed File System(HDFS)」と、Map 処理とReduce 処理の組み合わせでデータ処理を行う「MapReduce」で構成される。図は、テキストに含まれる文字を、MapReduceによってカウントした場合の略図
[画像のクリックで拡大表示]

 MapReduceの各処理はそれぞれ独立して動作するため、サーバーの台数を増やしたことに比例して、処理性能が向上する。

 Map処理、Reduce処理を多段に組み合わせることで、様々なバッチ処理が行える。通常プログラムはJavaで開発するが、「Hadoop Streaming」という追加ソフトを使うと、RubyやPerlなどのスクリプト言語でも開発ができる。

 米ヤフーが開発した「Pig」や、米フェースブックが開発した「Hive」という追加ソフトを使うと、RDBMSのデータ操作言語SQLに似た構文でプログラムを開発できる。ヤフーでHadoop開発チームのソフトウエアアーキテクトを務めるオーウェン・オマリー氏は「開発者が慣れ親しんだSQLを使うことで、開発期間は16分の1に短縮できた」と社内での成果を説明する。ただしPigを使うと、Hadoopを直に扱うのに比べて、処理時間は2倍になる。

 クラスター分析などの多変量解析、統計処理を行うライブラリー「Mahout(マハウト)」もある。Mahoutを使うと、多変量解析を実現するコードを開発する必要がなくなる。

 独立系システムインテグレータのウルシステムズでHadoopの検証を進める神林飛志取締役は「Mahoutを使えば、商用DWHソフトで行っているデータマイニングなどを、Hadoopで置き換えやすくなる」と分析する。

 Hadoopの性能を、東京大学情報基盤センターの清田陽司助教らが起業したベンチャー起業、リッテルが開発した「トレンドナビゲーター」というシステムを例にみてみよう(図2)。

図2●リッテルの「トレンドナビゲーター」の仕組み
日本国内の主要20ブログサービスで、言及が増えたキーワードを1時間ごとに計算する。4台のPCサーバーを使用し、処理時間は14分強(846.2秒)である
[画像のクリックで拡大表示]

 トレンドナビゲーターは、日本国内の主要20ブログサービスの投稿をチェックし、最近ブログでの言及が増えたキーワードを分析するサービス。NHK番組のDVDを販売するNHKエンタープライズがマーケティング用途に採用した。

 トレンドナビゲーターは、1日当たり100万ページ、1.5Gバイトのブログデータを集め、1時間ごとにキーワードの出現頻度や急上昇率などを算出する。その六段階のデータ処理が、4台のPCサーバーを使用して14分で終了する。

この先は日経クロステック Active会員の登録が必要です

日経クロステック Activeは、IT/製造/建設各分野にかかわる企業向け製品・サービスについて、選択や導入を支援する情報サイトです。製品・サービス情報、導入事例などのコンテンツを多数掲載しています。初めてご覧になる際には、会員登録(無料)をお願いいたします。