web-dev-qa-db-ja.com

Hadoopの分割サイズとブロックサイズ

Hadoopの分割サイズとブロックサイズの関係は何ですか? this で読んだように、分割サイズはブロックサイズのn倍でなければなりません(nは整数で、n> 0)、これは正しいですか?分割サイズとブロックサイズの間に関係がありますか?

15
duong_dajgja

HDFSアーキテクチャには、ブロックの概念があります。 HDFSで使用される一般的なブロックサイズは64 MBです。大きなファイルをHDFSに配置すると、64 MBのチャンクに分割されます(ブロックのデフォルト構成に基づいて)、1GBのファイルがあり、そのファイルをHDFSに配置すると仮定すると、1GB/64MB = 16になります分割/ブロックとこれらのブロックは、DataNode全体に分散されます。これらのブロック/チャンクは、クラスター構成に基づいて異なる異なるDataNodeに存在します。

データの分割は、ファイルオフセットに基づいて行われます。ファイルを分割して異なるブロックに保存する目的は、データの並列処理とフェイルオーバーです。

ブロックサイズと分割サイズの違い。

分割は、データの論理的な分割であり、基本的にMap/ReduceプログラムまたはHadoopエコシステムでの他のデータ処理技術を使用したデータ処理中に使用されます。分割サイズはユーザー定義の値であり、データの量(処理するデータの量)に基づいて独自の分割サイズを選択できます。

スプリットは、基本的にMap/Reduceプログラムでマッパーの数を制御するために使用されます。 Map/Reduceプログラムで入力分割サイズを定義していない場合、デフォルトのHDFSブロック分割は入力分割と見なされます。

例:

100MBのファイルがあり、HDFSのデフォルトのブロック構成が64MBである場合、2つのブロックに分割され、2つのブロックを占有します。このデータを処理するMap/Reduceプログラムがありますが、入力分割を指定していない場合、ブロック数に基づいて(2ブロック)入力分割がMap/Reduce処理のために考慮され、2マッパーがこのために割り当てられますジョブ。

ただし、Map/Reduceプログラムで分割サイズ(100MBなど)を指定した場合、両方のブロック(2ブロック)がMap/Reduce処理の単一の分割と見なされ、1つのMapperがこのジョブに割り当てられます。

Map/Reduceプログラムで分割サイズ(25MBなど)を指定した場合、Map/Reduceプログラムには4つの入力分割があり、4つのMapperがジョブに割り当てられるとします。

結論:

  1. 分割は入力データの論理的な分割であり、ブロックはデータの物理的な分割です。
  2. 入力分割が指定されていない場合、HDFSのデフォルトのブロックサイズはデフォルトの分割サイズです。
  3. 分割はユーザー定義であり、ユーザーはMap/Reduceプログラムで分割サイズを制御できます。
  4. 1つの分割は複数のブロックにマッピングでき、1つのブロックの複数の分割が可能です。
  5. マップタスク(マッパー)の数は、分割数と同じです。
58
Sandeep Singh
  • 400MBのファイルがあり、4レコードeg:400MBのcsvファイルで、4行、各100MB)

enter image description here

  • HDFSBlock Size128MBとして構成されている場合、4つのレコードブロック間で均等に分散されません。このようになります。

enter image description here

  • ブロック1には、最初のレコード全体と2番目のレコードの28MBのチャンクが含まれています。
  • マッパーをBlock 1で実行する場合、マッパーは2番目のレコード全体を持たないため処理できません。

  • これは、入力分割が解決する正確な問題です。 入力分割は論理レコードの境界を尊重します。

  • input splitサイズを200MBと仮定しましょう

enter image description here

  • したがって、入力スプリット1はレコード1とレコード2の両方を持つ必要があります。また、レコード2が割り当てられているため、入力スプリット2はレコード2で始まりません。入力スプリット1へ。入力スプリット2はレコード3から始まります。

  • これが、入力分割がデータの論理チャンクのみである理由です。ブロックの開始位置と終了位置を指します。

  • 入力分割サイズがブロックサイズのn倍の場合、入力分割は複数のブロックに適合する可能性があるため、ジョブ全体に必要なMappersの数が少なくなるため、より少ない並列性。 (マッパーの数は入力分割の数です)

  • 入力分割サイズ=ブロックサイズが理想的な構成です。

お役に立てれば。

11
tharindu_DG

Splitの作成は、使用されているInputFormatに依存します。以下の図は、FileInputFormatのgetSplits()メソッドが2つの異なるファイルの分割を決定する方法を説明しています。
Split Slope(1.1)の役割に注意してください。
enter image description here

対応するJava分割を行うソースは次のとおりです。

enter image description here
上記のメソッドcomputeSplitSize()は、Max(minSize、min(maxSize、blockSize)に展開されます)、最小/最大サイズはmapreduce.input.fileinputformat.split.minsize/maxsizeを設定することで構成できます

1
Avinash Ganta