Hadoop分散ファイルシステム

Webアプリケーションの開発およびそれらによって処理される情報の指数関数的な成長の現在の傾向により、高性能、スケーラビリティ、信頼性、および可用性を確保するためのファイルシステムの出現が必要になりました。 GoogleYahooなどの検索業界の巨人は、この問題から逃れられませんでした。



膨大な数の低コストサーバー上に構築されたGoogleアプリケーションおよびコンピューティングインフラストラクチャの詳細は、固有の絶え間ない障害により、独自のプライベート分散ファイルシステムGoogle File System(GFS)の開発につながりました。 このシステムは、ストリーミングモードでデータにアクセスする際の障害からの自動回復、高い耐障害性、高いスループットを目的としています。 システムは、大量のデータを処理するように設計されており、格納されたファイルのサイズが大きいことを意味するため、GFSは対応する操作に最適化されています。 特に、実装を簡素化して効率を向上させるために、GFSは標準のPOSIXインターフェイスを実装しません。



GFSの対応は、Hadoop分散ファイルシステムを備えたオープンソースのHadoopプロジェクトでした。 このプロジェクトは、Yahoo(18人)によって積極的にサポートおよび開発されています。 これらのシステムで使用される用語の比較分析を行い、それらの対応を確立し、HDFSについて詳しく説明します。

HDFS Gfs
メインサーバー Namenode マスター
スレーブサーバー DataNodeサーバー チャンクサーバー
追加およびスナップショット操作 - +
メインサーバーの障害後の自動回復 - +
実装言語 Java C ++


HDFSは、Hadoopプロジェクトで使用される分散ファイルシステムです。 HDFSクラスターは、主に、NameNodeサーバーと、データを直接保存するDataNodeサーバーで構成されます。 NameNodeサーバーは、ファイルシステムのネームスペースとデータへのクライアントアクセスを制御します。 NameNodeサーバーをオフロードするために、クライアントとDataNodeサーバー間でのみデータ転送が実行されます。



hdfs_arch



セカンダリNameNode:



メインNameNodeサーバーは、ファイルシステムメタデータの変更に関連するすべてのトランザクションをEditLogというログファイルにキャプチャします。 メインNameNodeサーバーが起動すると、HDFSイメージ(FsImageファイルにある)を読み取り、EditLogに蓄積されたすべての変更を適用します。 次に、変更が適用された新しいイメージが記録され、システムはクリーンなログファイルで作業を開始します。 NameNodeサーバーは、最初の起動時にこの作業を1回実行することに注意してください。 その後、このような操作はセカンダリNameNodeサーバーに割り当てられます。 FsImageとEditLogは最終的にメインサーバーに保存されます。



複製メカニズム:



hdfs_repl



NameNodeサーバーがDataNodeサーバーの1つの障害(ハートビートメッセージがないこと)を検出すると、データ複製メカニズムが開始します。



-新しいレプリカ用の新しいDataNodeサーバーの選択

-DataNodeサーバー間でのデータ配置のバランス



レプリカが破損した場合、または各ブロックに固有のレプリカの数が増えた場合にも、同様のアクションが実行されます。



レプリカ配置戦略:



データは、固定サイズの一連のブロックとして保存されます。 デフォルトでは、ブロック(複製)のコピーは複数のサーバーに保存されます(3つ)。 それらの配置は次のとおりです。



-最初のレプリカはローカルノードにあります

-同じラック内の別のノード上の2番目のレプリカ

-別のラックの任意のノード上の3番目のレプリカ

-他のレプリカはランダムに配置されます



データを読み取るとき、クライアントはレプリカを持つ最も近いDataNodeサーバーを選択します。



データの整合性:



ファイルシステムに実装された脆弱なデータ整合性モデルは、レプリカIDを保証しません。 したがって、HDFSはデータ整合性チェックをクライアントに移行します。 ファイルを作成するときに、クライアントは512バイトごとにチェックサムを計算し、その後DataNodeサーバーに保存します。 ファイルを読み取るとき、クライアントはデータとチェックサムにアクセスします。 また、矛盾がある場合は、別のレプリカにアピールします。



データ記録:



「HDFSにデータを書き込むとき、高いスループットを達成するためのアプローチが使用されます。 アプリケーションはストリーミングモードで記録し、HDFSクライアントは記録されたデータを一時ローカルファイルにキャッシュします。 ファイル内の1つのHDFSブロックにデータが蓄積されると、クライアントは新しいファイルを登録するNameNodeサーバーに接続し、ブロックを選択して、ブロックレプリカを保存するためのデータノードサーバーのリストをクライアントに返します。 クライアントは、ブロックデータを一時ファイルからリストの最初のDataNodeサーバーに転送し始めます。 DataNodeサーバーはデータをディスクに保存し、リスト内の次のDataNodeサーバーに送信します。 したがって、データはパイプライン化され、必要な数のサーバーに複製されます。 記録の最後に、クライアントはNameNodeサーバーに通知します。NameNodeサーバーは、ファイルを作成するトランザクションを記録し、その後システムで使用可能になります。



データ削除:



データの安全性のため(操作がロールバックされる場合)、特定の手法に従ってファイルシステムで削除が行われます。 最初に、ファイルはこのために特別に指定された/ trashディレクトリに移動され、一定の時間が経過すると物理的に削除されます。



-HDFS名前空間からファイルを削除する

-データブロックのリリース



現在の欠点:



-障害が発生した場合のメインサーバーの自動起動の欠如(この機能はGFSに実装されています)

-追加操作(バージョン0.19.0で想定)とスナップショットの不足(これらの機能はGFSでも実装されています)



Apache Foundation Webサイトのプロジェクトwikiで、HDFSの今後のバージョンで何が起こるかを読むことができます。 Hadoopを使用している人々の追加情報と意見は、このテクノロジーを積極的に使用している企業のブログ( YahooA9FacebookLast.fmLaboratory)にあります。



ソース:



-Dhruba B. Hadoop分散ファイルシステム、2007年

-トムW. Apache Hadoopのツアー

-Sanjay Ghemawat、Howard Gobioff、およびShun-Tak Leung Googleファイルシステム

-スホロスロフO.V. 分散ストレージおよび大規模データアレイの処理のための新技術



この記事は入門書であり、その目的は、読者に関連する開発の雰囲気を啓発することです。 肯定的なフィードバックおよび/または読者の関心がある場合、いくつかの追加の関連記事を準備します。




All Articles