Hadoopのファイルストレージ、ブロックサイズおよび入力分割
-
20-12-2019 - |
質問
このシナリオを検討してください:
それぞれ6 MBそれぞれ4つのファイルを持っています。HDFS
ブロックサイズは64 MBです。
1 block
はこれらすべてのファイルを保持します。それはいくつかの余分なスペースを持っています。新しいファイルが追加された場合は、ここに収容されます
input splits
によってMap-reduce
ジョブの場合にInput format
を計算した場合(split size
は通常HDFS block size
で、各スプリットは処理のためにメモリにロードすることができます。)
ここでの入力分割数:
-
は、4つのファイルがすべて
block
に含まれているためですか? -
またはファイルごとに1つの入力分割はありますか?
-
これはどのように決定されていますか?すべてのファイルを単一の入力分割として処理したい場合はどうなりますか?
解決
1ブロックはこれらすべてのファイルを保持します。それはいくつかの余分なスペースを持っています。新しいファイルが追加された場合は、ここに収容されます[...]すべての4つのファイルがブロック内に含まれているため、それはそれですか?
実際には4ブロックがあります。すべてのファイルが単一のブロックに収まるかどうかに適していません。
編集: ブロックはその他の方法ではなくファイルに属します。 HDFSは、ほぼ確実にあなたのブロックサイズよりも大きくなるようになる大きなファイルを格納するように設計されています。ブロックごとに複数のファイルを格納すると、NameNode ...
に不要な複雑さを追加します。-
blk0001
のファイルの代わりに、それは現在blk0001 {file-start -> file-end}
です。 - ファイルにどのように追加しますか?
- ファイルを削除するとどうなりますか?
- etc ...
またはファイルごとに1つの入力分割ですか?
1ファイルあたり1分割。
これはどのように決定されていますか?
すべてのファイルを単一の入力分割として処理したい場合はどうなりますか?
MultipleFileInputFormat
などの異なる入力フォーマットを使用します。
他のヒント
-
各ファイルは別のブロックに格納されますが、ファイルはその基礎となるストレージのフルブロックを占有しません。
-
HDFSは小さいファイルではありません - チェックこれは