2022年ですが、なぜHDFSはまだそれほど強力なのですか?

この記事はHuaweiCloudCommunityから共有されています。「なぜHDFSはビッグデータの分野で耐えられるのですか?、JavaEdgeによる。

1。概要

1.1はじめに

  • Hadoop(Hadoop分散ファイルシステム)によって実装された分散ファイルシステム(HDFSと呼ばれる)
  • 2003年に発行されたGoogleのGFSペーパーによると、HDFSはGFSのクローンです。

ビッグデータで最も価値があり、置き換えるのが難しいのはデータであり、すべてがデータを中心に展開しています。

HDFSは、貴重なデータ資産を格納する最も初期のビッグデータストレージシステムです。さまざまな新しいアルゴリズムやフレームワークを広く使用する場合は、HDFSをサポートして、格納されているデータを取得する必要があります。したがって、ビッグデータテクノロジーが開発され、新しいテクノロジーが増えるほど、HDFSのサポートが増え、HDFSと切り離せなくなります。HDFSは最高のビッグデータストレージテクノロジーではないかもしれませんが、それでも最も重要なビッグデータストレージテクノロジーです。

HDFSはどのようにしてビッグデータの高速で信頼性の高いストレージとアクセスを実現しますか?

Hadoop分散ファイルシステムHDFSの設計目標は、数千のサーバーと数万のディスクを管理し、大規模なサーバーコンピューティングリソースを単一のストレージシステムとして管理し、アプリケーションに数十ペタバイトのデータを提供することです。通常のファイルシステムを使用しているかのように大規模なファイルデータを保存するアプリケーション。

1.2設計目標

ファイルは複数のコピーで保存されます。

filel:node1 node2 node3
file2: node2 node3 node4
file3: node3 node4 node5
file4: node5 node6 node7

欠点:

  • ファイルの大きさに関係なく、1つのノードに格納されるため、データを処理する際に並列処理が困難になり、ネットワークのボトルネックとなり、ビッグデータの処理が困難になる場合があります。
  • ストレージの負荷のバランスを取るのが難しく、各ノードの使用率が非常に低い

アドバンテージ:

  • 巨大な分散ファイルシステム

  • 通常の安価なハードウェアで動作します

  • 拡張が簡単で、優れたパフォーマンスのファイルストレージサービスをユーザーに提供します

2分散ファイルシステムの設計方法

大容量記憶装置と高速アクセスのためのHDFSの実装。

RAIDがデータをシャーディングした後、読み取りと書き込みのアクセスが複数のディスクで同時に実行されるため、データの冗長性チェックにより、ストレージ容量が増加し、アクセスが高速化され、データの信頼性が向上します。特定のディスクが損傷しても、データが失われることはありません。RAIDの設計コンセプトを分散サーバークラスター全体に拡張すると、分散ファイルシステムが生成されます。これは、Hadoop分散ファイルシステムのコア原則です。

RAIDのファイルストレージと複数のディスクでの並列読み取りと書き込みの考え方と同様に、HDFSは、シャーディング後にデータの並列読み取りと書き込みと冗長ストレージを実行する大規模な分散サーバークラスターです。HDFSは大規模なサーバークラスターに展開できるため、クラスター内のすべてのサーバーのディスクをHDFSで使用でき、HDFS全体のストレージスペースをPBレベルに達することができます。

HDFSはマスタースレーブアーキテクチャです。HDFSクラスターには、マスターサーバーとしてNameNode(名前付きノード、略してNN)があります。

  • NameNodeは、ファイルシステムの名前空間を管理し、ファイルへのクライアントアクセスを規制するために使用されます
  • 複数のDataNode(略してDN)、スレーブノード(スレーブサーバー)として存在するデータノードもあります
  • 通常、各クラスターのDataNodeはNameNodeによって管理され、DataNodeはデータを格納するために使用されます

HDFSはファイルシステムの名前空間を公開し、ユーザーが通常osでファイルシステムを使用するのと同じようにデータをファイルに保存できるようにします。ユーザーは基になるデータの保存方法を気にする必要がありません。
内部的には、ファイルは1つ以上のデータブロックに分割され、これらのデータベースブロックは一連のデータノードに格納されます。CDHのデフォルトの128Mデータブロック。
NameNodeでは、ファイルのオープン、クローズ、名前変更などのファイルシステム名前空間操作を実行できます。これにより、データブロックのデータノードへのマッピングも決定されます。

HDFSは、通常Linuxオペレーティングシステムを実行する通常の安価なマシンで実行するように設計されています。一般的なHDFSクラスターの展開では、専用のマシンで1つのインスタンスのみが実行されますNameNodeが、他のクラスターのマシンではそれぞれ1つのDataNodeインスタンスが実行されます。1台のマシンで複数のノードを実行することは可能ですが、お勧めしません。

DataNode

  • ユーザーのファイルに対応するデータブロック(Block)を保存します
  • 定期的にハートビート情報をNNに送信し、自身とそのすべてのブロック情報およびヘルスステータスを報告します。

HDFSは、ファイルデータの保存と読み取り/書き込み操作を担当し、ファイルデータをいくつかのデータブロック(ブロック)に分割します。各DataNodeはブロックの一部を保存するため、ファイルはHDFSサーバークラスター全体に分散および保存されます。 。

アプリケーションクライアント(クライアント)はこれらのブロックに並列にアクセスできるため、HDFSはサーバークラスターの規模で並列データアクセスを実現でき、アクセス速度が大幅に向上します。

HDFSクラスターには多くのDataNodeサーバーがあり、通常は数百から数千の範囲です。各サーバーには複数のディスクが装備されており、クラスター全体のストレージ容量は約数PBから数百PBです。

NameNode

  • クライアントの要求に対応する責任があります
  • メタデータ(ファイル名、コピー係数、ブロックに保存されているDN)の管理を担当します

分散ファイルシステム全体のメタデータ(MetaData)管理、つまり、OSのファイルアロケーションテーブル(FAT)と同様に、ファイルパス名、データブロックID、保存場所、およびその他の情報を担当します。

高いデータ可用性を確保するために、HDFSはブロックを複数のコピー(デフォルトでは3つのコピー)にコピーし、同じブロックの複数のコピーを異なるサーバーまたは異なるラックに保存します。ディスクが損傷したり、DataNodeサーバーがダウンしたり、スイッチがダウンしたりして、ディスクに格納されているデータブロックにアクセスできない場合、クライアントはアクセスするバックアップブロックを探します。

3Sレプリカメカニズム

HDFSでは、ファイルは1つ以上のデータブロックに分割されます。デフォルトでは、各データブロックのコピーが3つあり、各コピーは異なるマシンに保存され、各コピーには固有の番号があります。

マルチコピーストレージのブロック図

ファイル/users/ sameerp / data / part-0の複製されたバックアップの数は2に設定され、保存されたBlockIDはそれぞれ1と3です。

  • Block1の2つのバックアップは、DataNode0とDataNode2の2つのサーバーに保存されます。
  • Block3の2つのバックアップは、DataNode4とDataNode6の2つのサーバーに保存されます。

上記のサーバーのいずれかがダウンした後、各データブロックのバックアップが少なくとも1つ存在します。これは、ファイル/ users / sameerp / data/part-0へのアクセスには影響しません。

RAIDと同様に、データはいくつかのブロックに分割され、異なるサーバーに格納されてデータの大容量ストレージを実現します。また、異なるシャードのデータを並行して読み取り/書き込みして、高速データアクセスを実現できます。

コピーストレージ戦略

レプリカストレージ:NameNodeノードは、ブロックレプリカを格納するDataNodeノードを選択します。このプロセスの戦略は、信頼性と読み取りおよび書き込み帯域幅のバランスを取ることです。

Hadoop Definitive Guideのデフォルトの方法:

  • 最初のレプリカはランダムに選択されますが、ストレージがいっぱいになったノードは選択されません
  • 2番目のコピーは、最初のコピーとは異なるランダムに選択されたラックに配置されます
  • 同じラック上の異なるノードの3番目と2番目
  • 残りのレプリカは完全にランダムなノードです

合理的な分析

  • 信頼性:ブロックは2つのラックに保管されます
  • 書き込み帯域幅:書き込みは1つのネットワークスイッチのみを通過します
  • 読み取り操作:読み取るラックの1つを選択します
  • ブロックはクラスター全体に分散されます

Googleのビッグデータ「troika」の最初のドライブはGFS(Google File System)であり、Hadoopの最初の製品はHDFSであり、分散ファイルストレージは分散コンピューティングの基盤です。

長年にわたり、さまざまなコンピューティングフレームワーク、さまざまなアルゴリズム、およびさまざまなアプリケーションシナリオが継続的に導入されてきましたが、ビッグデータストレージの王様は依然としてHDFSです。

5HDFSの高可用性設計

5.1データストレージのフォールトトレランス

ディスクメディアは、ストレージプロセス中の環境または経年劣化の影響を受け、保存されたデータは無秩序である可能性があります。

HDFSは、DataNodeに格納されているデータブロックのチェックサム(CheckSum)を計算して格納します。データを読み取るときに、読み取ったデータのチェックサムを再計算します。チェックサムが正しくない場合、例外がスローされます。アプリケーションが例外をキャッチした後、他のDataNodeのバックアップデータを読み取ります。

5.2ディスク障害耐性

DataNodeは、ローカルマシンの特定のディスクが損傷していることを検出すると、ディスクに保存されているすべてのBlockIDをNameNodeに報告します。NameNodeは、これらのデータブロックのバックアップがあるDataNodeを確認し、対応するDataNodeサーバーに対応するデータをコピーするように通知します。他のサーバーでは、データブロックのバックアップの数が要件を満たしていることを確認します。

5.3DataNodeのフォールトトレランス

DataNodeは、ハートビートを介してNameNodeとの通信を維持します。DataNodeが時間の経過とともにハートビートの送信に失敗した場合、NameNodeはDataNodeがダウンして失敗したと見なし、DataNodeに格納されているデータブロックとサーバーがすぐに検出されます。次に、これらのサーバーに別のデータブロックを他のサーバーにコピーするように通知して、HDFSに保存されているデータブロックのバックアップの数がユーザーが設定した数と一致するようにします。サーバーが再びダウンしても、データは失った。

5.4NameNodeのフォールトトレランス

NameNodeは、HDFS全体のコアであり、HDFSファイルアロケーションテーブルの情報を記録します。すべてのファイルパスとデータブロックストレージ情報はNameNodeに保存されます。NameNodeに障害が発生すると、HDFSシステムクラスター全体を使用できなくなります。 NameNodeに記録されたデータは失われ、クラスター内のすべてのDataNodeによって保存されたデータは役に立たなくなります。

したがって、NameNodeの高可用性とフォールトトレランスは非常に重要です。NameNodeは、マスタースレーブホットスタンバイモードで高可用性サービスを提供します。

クラスターは2つのNameNodeサーバーをデプロイします。

  • 1つはマスターサーバーとして機能します
  • ホットバックアップ用のスレーブサーバーとして1つ

2つのサーバーは、主にznodeロックリソースを競合してマスターサーバーを決定することにより、Zkによって選出されます。DataNodeはハートビートデータを両方のNameNodeに同時に送信しますが、制御情報をDataNodeに返すことができるのはプライマリNameNodeだけです。

通常の操作中、ファイルシステムのメタデータ情報は、共有ストレージシステムの共有編集を介してマスターとスレーブのNameNode間で同期されます。プライマリNameNodeサーバーがダウンすると、セカンダリNameNodeがアップグレードされてZooKeeperを介してプライマリサーバーになり、HDFSクラスターのメタデータ情報(ファイル割り当てテーブル情報)が完全で一貫していることを確認します。

パフォーマンスの低いソフトウェアシステムは、ユーザーに受け入れられる可能性があります。ユーザーエクスペリエンスの低下も許容される可能性があります。ただし、可用性が低い場合、頻繁に失敗して利用できなくなると面倒になります。重要なデータが失われると、開発は大きな出来事になります。

分散システムは多くの場所で障害が発生する可能性があります。メモリ、CPU、マザーボード、およびディスクが損傷し、サーバーがダウンし、ネットワークが中断され、コンピュータルームの電源がオフになります。これらすべてにより、ソフトウェアシステムが利用できない、または永続的なデータです。失われました。

したがって、分散システムを設計する場合、ソフトウェアエンジニアはユーザビリティの文字列を厳しくし、さまざまな障害が発生した場合でもソフトウェアシステム全体を利用できるようにする方法を検討する必要があります。

システムの可用性を確保するための6つの戦略

冗長バックアップ

すべてのプログラムとデータには、少なくとも1つのバックアップが必要です。つまり、プログラムは少なくとも2つのサーバーにデプロイされ、データは少なくとも別のサーバーにバックアップされる必要があります。さらに、小規模のインターネット企業は複数のデータセンターを構築し、データセンターは相互にバックアップします。ユーザーの要求は、いわゆるリモートマルチアクティブである任意のデータセンターに分散できます。自然災害が発生した場合でも、アプリケーションの高い可用性が保証されます。

フェイルオーバー

アクセスするプログラムまたはデータにアクセスできない場合は、バックアッププログラムまたはデータが配置されているサーバーにアクセス要求を転送する必要があります。これはフェイルオーバーとも呼ばれます。フェイルオーバーでは、障害の識別に注意する必要があります。マスターサーバーとスレーブサーバーがNameNodeのように同じデータを管理するシナリオで、スレーブサーバーがマスターサーバーがダウンしていると誤って判断し、クラスター管理を引き継ぐ場合、マスタースレーブサーバーは一緒にDataNodeに命令を送信します。これにより、クラスターの混乱、いわゆる「スプリットブレイン」が発生します。これは、このようなシナリオでマスターサーバーを選択するときにZooKeeperが導入される理由でもあります。ZooKeeperの仕組みについては、後で分析します。

ダウングレード

コンピューティングリソースが限られているため、多数のユーザー要求またはデータ処理要求が到着すると、そのような多数の要求を処理できず、リソースの枯渇やシステムのクラッシュが発生する可能性があります。この場合、一部の要求、つまり電流制限を拒否できます。一部の機能をオフにして、リソース消費を削減することもできます。つまり、ダウングレードすることもできます。現在のスロットリングはインターネットアプリケーションの通常の機能です。負荷容量を超えるアクセストラフィックが突然到着する時期を予測できないため、事前に準備する必要があります。突然のピークトラフィックが発生した場合は、すぐに現在のスロットリングを開始できます。ダウングレードは通常、eコマースの「ダブルイレブン」プロモーションなどの予測可能なシナリオに備えて準備されます。注文機能などのプロモーション中のアプリケーションのコア機能の正常な動作を保証するために、システムは次のようになります。ダウングレードおよびクローズ。製品評価機能などの重要でない機能。

要約する

HDFSが、大規模な分散サーバークラスターを介して、大容量、高速、信頼性の高いストレージとデータへのアクセスを実現する方法。

1.ファイルデータはデータブロックに分割され、データブロックはクラスター内の任意のDataNodeサーバーに保存できるため、HDFSに保存されるファイルは非常に大きくなる可能性があり、理論的には1つのファイルがHDFS全体のすべてのディスクを占有できます。サーバークラスター。大容量ストレージ。

2. HDFSの一般的なアクセスモードは、コンピューティング中にMapReduceプログラムを読み取ることであり、MapReduceはシャード内の入力データを読み取ります。通常、シャードはデータブロックであり、各データブロックにはコンピューティングプロセスが割り当てられます。多くのプロセスがHDFSファイルの複数のデータブロックに同時にアクセスするため、高速データアクセスが実現します。MapReduceの特定の処理プロセスについては、このコラムの後半で詳しく説明します。

3. DataNodeによって保存されたデータブロックが複製されるため、各データブロックはクラスター内に複数のバックアップを持ち、データの信頼性を確保し、一連の一連のデータを通じてHDFSシステムの主要コンポーネントの高可用性を実現します。フォールトトレランス方式を採用し、データとシステム全体の高可用性を確保します。

初めてHUAWEICLOUDの新技術について学ぶには、[フォロー]をクリックしてください〜

おすすめ

転載: blog.csdn.net/devcloud/article/details/124092651