HDFS ブロックの詳細な説明

HDFS ブロックの詳細な説明

従来の分散ファイル システムの欠点

次の状況を想像してください: 0.5TB の file1、1.2TB の file2、50GB の file3、および 100GB の file4 という 4 つのファイルがあり、7 台のサーバーがあり、各サーバーに 10 台の 1TB のハードディスクがあります。

ストレージに関しては、これら 4 つのファイルを同じサーバーに保存できます (もちろん、1TB を超えるファイルは分割する必要があります)。ファイルを使用してこのストレージのマッピング関係を記録する必要があります。ユーザーは、このマッピング関係を通じて、ノードのハードディスク上で対応するファイルを見つけることができます。次に、欠点が明らかになります。

まず、負荷のバランスが取れていません。

ファイル サイズが一貫していないため、必然的に、一部のノードのディスク使用率が高くなり、一部のノードのディスク使用率が低くなります。

2 つ目は、ネットワークのボトルネックの問題です。

サイズが大きすぎるファイルがノード ディスクに保存されている場合、並列処理が行われる場合、各スレッドがノード ディスクからファイルの内容を読み取る必要があるため、ネットワーク ボトルネックが発生し、分散データ処理には適していません。

HDFS ブロック

HDFS は、他の通常のファイル システムと同様に、ブロック (Block) の概念を導入しており、ブロックのサイズは固定されていますただし、一般的なファイル システムほど小さくはありませんが、実際のニーズに応じてカスタマイズできます。ブロックは HDFS システム内の最小のストレージ単位であり、hadoop2.0 のデフォルト サイズは 128MB です (hadoop1.x のブロック サイズは 64M)。HDFS 上のファイルは複数のブロックに分割され、各ブロックは独立した単位として保存されます。複数のブロックが異なる DataNode に保存され、HDFS システムは、プロセス全体を通じて 1 つのブロックが 1 つの DataNode に保存されることを保証しますただし、特定のファイルまたはファイルの最後のブロックのサイズが 128M に達しない場合は、ブロック スペース全体を占有しないことに注意してください。

HDFS の設計思想を見てみましょう。次の図を例として説明します。

HDFS ブロック サイズ

HDFS のブロック サイズが従来のファイルよりもはるかに大きいのはなぜですか?

  1. 目的は、アドレス指定のオーバーヘッド時間を最小限に抑えることです。
    I/O オーバーヘッドの中で、機械式ハードディスクのアドレッシング時間が最も時間がかかりますが、最初のレコードが見つかったら、残りの連続読み取り効率が非常に高いため、ブロック単位でデータを読み書きすることができます。全体的なディスクのシーク時間を短縮します。
    HDFS アドレス指定オーバーヘッドには、ディスク シーク オーバーヘッドだけでなく、データ ブロック位置決めオーバーヘッドも含まれます。クライアントがファイルにアクセスする必要がある場合、最初にファイルを構成するデータ ブロックの位置リストをネーム ノードから取得し、次に、ロケーションリストに基づく実際のストレージ 各データブロックのデータノードのロケーション 最後に、データノードはデータブロック情報に従ってローカル Linux ファイルシステム内で対応するファイルを見つけ、データをクライアントに返します。比較的大きなブロックとして設計されており、各ブロックを削減できます。データ内のデータの総アドレッシング オーバーヘッドにより、単位データのアドレッシング オーバーヘッドが相対的に削減されます。ディスクのアドレッシング時間は約 5 ~ 15ms、平均 10ms
    、最小アドレッシング オーバーヘッド時間は一般に 1 秒であると考えられています。1 パーセントが最適であるため、ブロック サイズの選択は 1 秒の伝送速度を参照します。たとえば、2010 年のハードディスクの伝送速度は 100M/s です。の場合、ブロック サイズは 128M として選択されます。
  2. メモリ使用量を節約するために、
    ブロックのメタデータは約 150 バイトです。1 億ブロックは、サイズに関係なく、約 20G のメモリを占有します。したがって、ブロックが大きくなるほど、クラスターが比較的多くのデータを保存できるようになります。したがって、小さなファイルの保存には適さないという HDFS の欠点が明らかになりました。

HDFS が小さなファイルの保存に適していないのはなぜですか?

  1. HDFS ファイルは、ストレージ容量 (固定メモリ) から始まり
    、ブロック単位で保存され、ファイル サイズが 128M 未満の場合、ブロック全体のスペースを占有しません。ただし、このブロックは依然としてメモリ内の 150 バイトのメタデータを占有します。したがって、同じメモリ使用量の下で、多数の小さなファイルがあると、クラスタのストレージ容量が不足します。
    たとえば、同じ 128G メモリに最大 9 億 2,000 万ブロックを保存できます。これらがすべて 1M などの小さなファイルである場合、クラスターに保存されるデータ サイズは 9 億 2,000 万 * 1M = 877 TB のデータになります。ただし、保存されているすべてのファイルが 128M の場合、クラスターに保存されるデータ サイズは 109.6PB になります。ストレージ機能はさまざまです。

  2. メモリ使用量 (固定ストレージ容量) から始めて、
    1M および 128M のファイルを保存することも想定されており、さらに 1PB のデータを保存することも想定されています。1M の小さなファイル ストレージの場合、占有メモリ空間は 1PB/1Mb 150Byte = 150G になります。メモリー。ストレージが 128M ファイル ストレージの場合、占有メモリ空間は 1PB/128M 150Byte = 1.17G メモリ占有となります。同じ 1PB のデータのストレージの場合、小さなファイルのストレージは大きなファイルのストレージよりも多くのメモリを使用することがわかります。

ブロック関連のパラメータ設定

当然块大小在默认配置文件hdfs-default.xml中有相关配置,我们可以在hdfs-site.xml中进行重置
<property>
    <name>dfs.blocksize</name>
    <value>134217728</value>
    <description>默认块大小,以字节为单位。可以使用以下后缀(不区分大小写):k,m,g,t,p,e以重新指定大小(例如128k, 512m, 1g等)</description>
</property>

<property>
    <name>dfs.namenode.fs-limits.min-block-size</name>
    <value>1048576</value>
    <description>以字节为单位的最小块大小,由Namenode在创建时强制执行时间。这可以防止意外创建带有小块的文件降低性能。</description>
</property>

<property>
    <name>dfs.namenode.fs-limits.max-blocks-per-file</name>
    <value>1048576</value>
    <description>每个文件的最大块数,由写入时的Namenode执行。这可以防止创建降低性能的超大文件</description>
</property>

ブロックの保存場所

ではhdfs-site.xml、次のプロパティを設定しました。このプロパティの値は、Linux システム上のブロックの保存場所です。

<!-- 确定DFS数据节点应该将其块存储在本地文件系统的何处-->
<property>
    <name>dfs.datanode.data.dir</name>
    <value>file://${hadoop.tmp.dir}/dfs/data</value>
</property>

HDFS の利点

  1. 高い耐障害性 (ハードウェア障害は標準的): データは複数のコピーに自動的に保存され、コピーが失われた後に自動的に復元されます。
  2. GB、TB、さらには PB レベルのデータ、数千万を超えるファイル数、1,000 ノードを超える規模などの大規模なデータ セットに適しています。
  3. データ アクセス: 1 回の書き込み、複数回の読み取り、データの一貫性とセキュリティを確保
  4. 構築が安価: 安価なマシンで構築できます。
  5. 複数のハードウェアおよびソフトウェア プラットフォームにわたる移植性
  6. 効率: Hadoop はノード間でデータを動的に移動し、各ノードの動的なバランスを確保できるため、処理速度が非常に速くなります。
  7. 高い信頼性: データを保存および処理する Hadoop の機能は信頼できます。

HDFS の欠点

  1. 低レイテンシのデータ アクセスには適さない:
    HDFS の設計目標の 1 つは、大規模なデータ セットと高スループットを処理することです。これには、必ず高いレイテンシーが犠牲になります。したがって、HDFS は、ユーザーが要求するミリ秒レベルの低遅延アプリケーション リクエストの処理には適していません。
  2. 小さいファイルへのアクセスには適さない:
    1 つは、多数の小さいファイルには多くのアドレス指定時間を消費する必要があるため、アドレス指定時間の割合を可能な限り削減するという HDFS の設計目標に違反します。2 つ目はメモリの制限で、ブロック メタデータの大量のメモリ消費量は約 150 バイトであり、1 億ブロックの保存と 1 億の小さなファイルの保存では 20G のメモリが消費されます。したがって、相対的に言えば、大きなファイルはメモリを節約します。
  3. これは同時書き込みには適しておらず、ファイルはランダムに変更されます。HDFS
    上のファイルには書き込みできるのは 1 つだけであり、追加操作のみがサポートされます。複数のユーザーが同じファイルに書き込み、ファイル内の任意の場所を変更することはサポートされていません。

ビッグデータのさらにエキサイティングなコンテンツについては、ステーション B で 「 Qianfeng Education 」を検索するか、コードをスキャンして資料の完全なセットを入手してください。

[Qianfeng Education] ビッグデータ開発に関する完全なチュートリアル セット、史上最も包括的なビッグデータ学習ビデオ

 

おすすめ

転載: blog.csdn.net/longz_org_cn/article/details/131653087