大規模データの分散処理を実現するHadoopはクラウドでこそ生きる?
最近、注目をされているのがビッグデータを処理するHadoopだ。米国で開催されたMicrosoftのデータベースSQL Serverのユーザーカンファレンス「PASS Summit」では、HadoopをWindows ServerやWindows Azureに対応させると発表しているし、OracleもHadoopベースのアプライアンス「Oracle Big Data Appliance」を発表するなど、業界での関心はますます高まっている。
また、前回取り上げたAmazon Web Services(AWS)のセリプスキー副社長のインタビューでも、AWS上でElastic MapReduceサービスを使って、ビッグデータを扱っている事例が増えているとされていた。クラウドでもHadoopが利用されるようになっているのだ。
そこで今回は、Hadoopに関して解説していく。
■Hadoopって何?
Apache HadoopプロジェクトのWebサイト |
Hadoopは、もともと、Googleが検索エンジン用に開発したバッチ処理システムを参考に作られたもので、このシステムでは、数千ものノードを用いて、ペタバイトクラスのデータが処理できる。
参考にしたとはいっても、Googleがコードをオープンにしたのではなく、自社の検索システムを紹介する論文中で、データ処理のMapReduce、分散ファイルシステムのGoogle File Systemを解説。この論文を見たエンジニア(Doug Cutting氏)が、Yahoo!社内で利用するシステムとしてHadoopの開発を進めていた。
また現在のHadoopは、Apache Software Foundationに移管され、オープンソースソフトとしてメンテナンスされている。
Hadoopは、分散ファイルシステム上のビッグデータを処理できるシステムとして、さまざまな用途に利用されている。例えば、楽天では、ある商品に対するお薦め商品をリストアップする「レコメンド処理」に利用している。日本のヤフーでは検索関連のサービスでHadoopを利用しており、以前は6時間ほどかかった処理が、Hadoopに変えてからは5分ほどで済むようになったという。AWSでHadoopを利用しているクックパッドでは、自社のサービス(たべみる)のデータ解析などで利用している。
また国内では、特に、NTTデータやノーチラス・テクノロジーズなどが、積極的にシステムの開発を行っている。ノーチラス・テクノロジーズは、Hadoopのバッチ処理システムを構築するフレームワークAsakusaを開発したメンバーなどで設立された企業だ。
【お詫びと訂正】
初出時、本章の冒頭部に「もともとGoogleが検索エンジン用に開発したバッチ処理システム」と記載しておりましたが、後段にありますように、直接Googleがコードを提供したものではございません。前後が矛盾した表現になっておりましたので、冒頭部分の表記を改めました。お詫びして訂正いたします。
NTTデータのHadoopサービスの紹介サイト。NTTデータでは、Cloudera(後述)のHadoopディストリビューションを使ったサービスを提供している | HadoopのフレームワークAsakusaを提供しているノーチラス・テクノロジー。製パン業のアンデルセングループが生産管理システムにAsakusaが利用されている。このシステムは、AWS上で動作している |
■Hadoopのアーキテクチャ
Hadoopは、複数のノードにデータを分散させるHadoop分散ファイルシステム(Hadoop Distributed File System:HDFS)と、実際にデータ処理を依頼するMapReduceエンジンの2つに、大まかに分けられる。
HDFSは、DataNodeとNameNodeに分かれている。DataNodeは、実際にデータが保持されるサーバーで、ファイルは1ブロックが64MB(デフォルト)の固定サイズに分割されて、保存されている。NameNodeは、ファイルシステムのディレクトリ構造やファイルのアクセス権を管理している。
HDFSでは、信頼性を高めるために、データを分割したブロックを複数のDataNodeにレプリケーションする機能が用意されている。システム全体でどのくらいのレプリケーション数を取るのかは自由に設定可能。例えば、冗長性を考えて3つに設定すれば、複製が常に3つ存在することになる。もし、トラブルなどでDataNodeの1つがダウンしても、複製が生きていれば別のDataNodeから復旧できるため、データブロックの消滅を防げる。
分散ファイルシステムのHDFSのアーキテクチャ(Apache HadoopのWebサイトより) | HDFSのレプリケーション例。DataNodeに分散してレプリケーションすることで可用性を高めている(Apache HadoopのWebサイトより) |
MapReduceは、情報の分解/抽出を行うMapフェーズ、情報の集約/計算を行うReduceフェーズで構成されている。MapReduce処理は、それぞれが単独で動作するため、サーバーの台数を増やせばそれだけ処理性能が向上することになる。
Hadoopは、Javaで記述されているため、MapReduce処理でもJavaでプログラミングすることが多い。しかし、Hadoop関連のプロジェクトで開発されている追加ソフトを利用すれば、RubyやPerlなどのスクリプト言語でも処理を記述することができる。
また、Yahoo!が開発したPig、米Facebookが開発したHiveなどを利用すれば、RDBMSなどで利用されているSQL言語に近い構文で、プログラミングを行えるようになっている。
これ以外にも、機械学習ライブラリの「Apache Mahout」を用いれば、Hadoop上でクラスタ分析などの多変量解析、統計処理などを行える。
■Hadoopの実行環境として最適なクラウド
Hadoopは、分散型コンピューティングをベースとして、ペタバイトクラスのデータを処理するシステムだ。開発当初から、分散コンピューティング環境が基盤となっているため、Hadoopはクラウドサービスとの親和性が非常に高い。
現在のHadoopでは、最大4000クラスタまで使用することができる。これだけのサーバーをオンプレミスで運用しようとすれば、ハードウェアを導入するだけでも、巨額な初期投資が必要になる。
また、Hadoopを利用するようなビッグデータからのデータ抽出は、基幹業務システムで利用するRDBMSのように、リアルタイムで運用するわけでもない。業種によっては、Hadoopを日々動かし続けるということもあるだろうが、多くの場合、Hadoopで処理したデータをRDBMSに変換して利用する、といったことが多くなる。
クラウドならHadoopの負荷に応じてクラスタの拡張/伸縮が自由に行える(Hadoop Conference Japan 2011 Fallの資料より) |
こういったことを考えれば、Hadoopを動かすサーバーは、必要な時点では数千台になるが、処理をしていない時には、全く必要ないといったことになる。
クラウドサービスを利用すれば、必要な時に、サーバーを追加して処理を行うことができる。もし、処理に時間がかかるようなら、いつもよりもノードを増やして、データ処理を高速に行うことが可能だ。処理が終われば、クラウドのノードを縮小すればいい。処理の時だけクラウドのコンピュートパワーを時間で借りることになるため、コスト的にはこちらの方が優位になる。
また、数PB(ペタバイト)のデータをオンプレミスの高価なストレージに保存しておくより、バイト単価が安いクラウドストレージを利用する方が、やはりメリットがあるのではないか。
現在、Hadoopのインフラを提供している大手のパブリッククラウドベンダーとしては、AWSが有名だ。AWS以外にも、IBMやNTTデータなどがサービスを提供している。
Microsoftも、Yahoo!からスピンオフしたHadoopの開発企業Hortonworksと共同で、Windows Server/Windows Azure上で稼働するエンタープライズレベルのHadoopを提供する。Windows Azureで動作するHadoopのCTPは、年内にリリースされる予定だ。
Microsoftでは、単にWindows AzureにHadoopをインプリメントするだけでなく、Hadoopのクライアントとして、ExcelのPowerPivotなどを利用できるようにする予定だ。これにより、Excelの簡単なインターフェイスを利用して、Hadoopのビッグデータが扱えるようになる。また、HadoopクラスタとSQL Server間でデータをやりとりするコネクタソフト「Hadoop Connectors for SQL Server and Parallel Data Warehouse」の提供も開始している。
Hadoop自体も多くの企業で利用されるようになり、次の進化を始めている。次バージョンのHadoop 0.23では、Hadoopの大幅な改良を行っている。現在のHadoopでは、最大クラスタ数が4000台となっているが、Hadoop 0.23では最大数を6000~1万台にまで拡張する。さらに、現在のHadoopの弱点ともいわれている管理ノード(管理ノードは1つしか存在できないため、管理ノードに障害が起こるとHadoopシステム自体がダウンする)に冗長性を持たせるようにする。
また、データ処理を行うMapReduceはバージョン2にアップされ、Map処理、Reduce処理以外の処理モデルに対応する。
Hadoop 0.23では、HDFSの機能が拡張される。管理ノードに冗長性を持たすことで、高い可用性を実現させる(HortonworksのWebサイトより) | MapReduce V2のアーキテクチャ |
なお現在、HadoopはApacheのもとでメンテナンスされているが、オープンソースプロジェクトで扱われており、実際の開発は、HadoopのディストリビュータのCloudera、Hortonworks、MapR Technologiesなどが中心になっている。
Clouderaは、Hadoopのディストリビューションだけでなく、Hadoopに関連するさまざまなサービスを提供している企業で、日本国内ではNTTデータと提携している。
Hortonworksは、今年設立された企業だが、前述のようにYahoo!でHadoopの開発を行っていたチームがスピンアウトして設立された。
MapR Technologiesは、Javaで記述されているHadoopの分散ファイルシステムHDFSをC++で書き直し、MapRとして提供している。MapRは米EMCにOEM提供され、Greenplum HDという名称で販売されている。
ClouderaのWebサイト。日本国内でも積極的にHadoopのディストリビューションの提供を行っている | HortonworksのWebサイト。Hortonworksは、Yahoo!でHadoopの開発を行っていたメンバーがスピンアウトして設立した企業だ | MapR TechnologiesのWebサイト。同社は自社のHadoopをEMCにOEM提供している |
Hadoopに関しては、毎日膨大なデータを生み出しているネット企業が先行して利用しているが、徐々に一般の企業においても利用されてくるだろう。1つの企業が生み出す膨大なデータを、今までは処理できずにそのまま死蔵していた。しかし、Hadoopとクラウドを使えば、膨大な生データを活用して、さまざまなビジネスシーンに活用していくことができるだろう。
例えばクックパッドでは、ユーザーが入力した料理のレシピだけでなく、どの時期にどういった料理が参照されたか、といったデータも保存している。このデータを使えば、季節や地域でどういった料理が作られているのか、ということも推測できる。
今後は、膨大なデータをどのように活用していくことが、新しいビジネスチャンスを切り開いていくために、欠かせないものになるかもしれない。この時に、Hadoopと、低コストで膨大なサーバークラスタが運用できるクラウドサービスとの組み合わせは、大きな武器となるだろう。