Hadoop
| 開発元 | Apacheソフトウェア財団 |
|---|---|
| 最新版 | 1.0.3 / 2012年05月16日 |
| 最新評価版 | 2.0.0-alpha / 2012年05月23日 |
| プログラミング言語 | Java |
| 対応OS | クロスプラットフォーム |
| サポート状況 | Active |
| 種別 | Distributed File System |
| ライセンス | Apache License 2.0 |
| 公式サイト | http://hadoop.apache.org/ |
Apache Hadoopは大規模データの分散処理を支えるJavaソフトウェアフレームワークであり、フリーソフトウェアとして配布されている。[1]Hadoopはアプリケーションが数千ノードおよびペタバイト級のデータを処理することを可能としている。HadoopはGoogleのMapReduceおよびGoogle File System(GFS)論文に触発されたものである。
HadoopはApacheのトップレベルプロジェクトの1つであり、世界規模の開発貢献者コミュニティによって開発され、使用されている。[2]
目次 |
アーキテクチャ [編集]
Hadoop は、 Hadoop が対応 (support) するファイルシステムへのアクセスを提供するHadoop Commonで構成する。ここで、「Rack Awareness」とは、サーバクラスタの地理的位置を考慮した最適化の考えである。つまり、異なる地理的位置にあるサーバ間の網伝送(network traffic)を最小にするということである。[3] 2008年6月現在、下記のファイルシステムに対応している。
- HDFS: Hadoop独自のファイルシステムである。HDFSは各OSが提供するファイルシステム上で動作し、 数ペタバイトの容量まで拡張するよう設計している。
- Amazon S3 filesystem. このファイルシステムは、Amazon Elastic Compute Cloud (EC2) 環境で構築したクラスタ上で動作する。なお、このAmazon S3 ファイルシステムはRack-awarenessが考慮されておらず、すべてリモートサイトで動作する。
- CloudStore(旧 Kosmos Distributed File System): HDFSのようなRack-Awarenessなファイルシステム。
- FTP Filesystem: すべてのデータをFTPによりアクセス可能なリモートサーバに格納する。
- Read-only HTTP and HTTPS file systems.
Hadoop分散ファイルシステム [編集]
Hadoop分散ファイルシステム(HDFS:Hadoop Distributed File System)は 大きなファイル(理想的には64MBの倍数[4])を複数の計算機にまたがり格納することができる。HDFS はデータの複製を複数のホストに格納することで信頼性を確保しているため、各ホストはRAIDを必要としない。デフォルトのレプリケーション数3のとき、データは3つのノードに保存する。この場合、2つのデータを同じラック内のノードに、残りひとつを異なるラックに保存する。
HDFSはデータノード (Data node) のクラスタにより構成する。データノードはそれぞれ、HDFS独自のブロック転送プロトコルによりデータブロックを転送する。データノードはまたHTTPによりデータを提供することができ、WEBブラウザ等のクライアントからのアクセスを処理できる。データノード間はお互いに通信し、データ再配置、データコピー、冗長性維持を行うことができる。
HDFSはネームノード (Name node) と呼ばれる唯一の特殊なノードを必要とする。ネームノードは、HDFSにおけるsingle point of failureである。ネームノードがダウンした場合、ファイルシステムはオフラインとなる。その後ネームノードが復旧した際には、ネームノードは未実行のすべてのオペレーションをリプレイする必要がある。このリプレイ処理は、クラスタの規模が大きい場合、時に30分以上を要する場合もある。[5] 一方、HDFSはセカンダリ・ネームノードと呼ばれる機能を有している。この名前は、プライマリ・ネームノードがオフラインとなった時セカンダリ・ネームノードが代替するかのように誤解を与える。しかしながら実際は、セカンダリ・ネームノードは定期的にプライマリノードに接続し、その保存されているディレクトリ情報のスナップショットをダウンロードする。セカンダリ・ネームノードはプライマリ・ネームノードの編集ログを用い、最新のディレクトリ構造を作成する。
HDFSは、通常のオペレーティングシステムにマウントできないことはまた制限のひとつである。ジョブ実行の前後にはしばしばHDFSとデータの入出力が必要になるが、マウントできないため不便である。LinuxなどいくつかのUNIXシステムでは、Filesystem in Userspaceによりこの問題を解決しているものもある。
データの複製を3回行うことは高コストである。コスト軽減のため、HDFSの最近のバージョンではErasure符号をサポートし、同じファイルの複数のブロックを結合しパリティブロックを生成している。HDFSではこのパリティブロックを非同期で生成することにより、複製生成数を3から2に減らしている。これにより、必要とされる物理ストレージ領域が3倍から約2.2倍に減少しているとの報告がある。
ジョブトラッカとタスクトラッカ: map/reduceエンジン [編集]
ファイルシステムの上にMapReduceエンジンが動作する。MapReduceエンジンはひとつのジョブ・トラッカーを持ち、クライアント・アプリケーションはこのジョブ・トラッカーに向けてmap/reduceジョブを投入する。ジョブが投入されると、ジョブ・トラッカーはクラスタ中の利用可能なタスク・トラッカーに仕事を依頼する。この時、できるだけデータに近くで仕事が行われるように努力を払う。Rack awareなファイルシステムにより、ジョブ・トラッカーはどのノードがデータを保持しているか、そしてどのマシンが近くにあるかを知ることができる。これによりメイン・バックボーン・ネットワークの通信トラフィックを抑える。タスク・トラッカーが落ちるかタイムアウトすると、その部分のジョブは再スケジュールされる。ジョブ・トラッカーが落ちると、実行中の仕事は失われる。
Hadoopバージョン0.21にはチェックポイントの機能が加えられた。ジョブ・トラッカーはそれまでの結果をファイルシステムに記録する。ジョブ・トラッカーが起動した時には、そのように記録されたデータを探す。このため中断したところから仕事を再開することができる。それ以前のバージョンのHadoopでは、ジョブ・トラッカーが再開した時にはすべての実行中の仕事は失われる。
このアプローチには以下の欠点が知られている。
- 仕事のタスク・トラッカーへの割り当てはとても単純である。各タスク・トラッカーはある数の利用可能なスロットを持つ(例えば4スロット)。アクティブなmapまたはreduceタスク1つはスロットを1つ使用する。ジョブ・トラッカーはデータに最も近い利用可能なスロットを持つタスク・トラッカーに仕事を割り当てる。このとき割り当てたマシンの実際の負荷を考慮しないので、実際には利用できないかもしれない。
- あるタスク・トラッカーがとても遅い場合、特にジョブの終りでは他のすべてが1つの遅いタスクの待ちに入り、全体のmap/reduce操作が遅くなってしまう。しかし、投機的実行を用いると1つのタスクを複数のスレーブ・ノードで実行することができる。
他のアプリケーション [編集]
主要なユーザ [編集]
Yahoo!におけるHadoop [編集]
他のユーザ [編集]
Yahoo! 以外にも様々な組織がHadoopを使って大規模分散システムを構築している。以下に例を挙げる:[6][7]
- A9.com
- Fox Interactive Media
- IBM
- ImageShack
- ISI
- Joost
- Last.fm
- Powerset
- ニューヨーク・タイムズ
- Rackspace
- スカイアーチネットワークス
- Veoh
- Metaweb
- 楽天
Amazon EC2/S3サービスにおけるHadoop [編集]
Sun Grid EngineにおけるHadoop [編集]
HadoopにおけるSun Grid Engine ― および於分散コンピューティング/コンピュータ・クラスター環境におけるジョブ管理システム。[8]
参考文献 [編集]
- 日経BP出版局著 「クラウド大全 サービス詳細から基盤技術まで」2009年 ISBN10 4822283887
脚注 [編集]
- ^ Hadoop Overview
- ^ Hadoop Users List
- ^ http://hadoop.apache.org/core/docs/r0.17.2/hdfs_user_guide.html#Rack+Awareness
- ^ The Hadoop Distributed File System: Architecture and Design
- ^ Improve Namenode startup performance. "Default scenario for 20 million files with the max Java heap size set to 14GB : 40 minutes. Tuning various Java options such as young size, parallel garbage collection, initial Java heap size : 14 minutes"
- ^ PoweredBy
- ^ Apache HadoopやApache CassandraなどをはじめとするOSS(オープンソースソフトウエア)を活用
- ^ HDFS-Aware Scheduling With Grid Engine