Hadoopについて簡単に知っています
それがどのように機能するのか知りたいです。
正確に言うと、入力ファイルをどの程度正確に分割/分割するかを知りたいです。
サイズの点で等しいチャンクに分割されていますか?
またはそれは構成可能なものです。
私はこの投稿を読みましたが、理解できませんでした
FileInputFormat
これは、ほとんどのファイルベースの形式で基本クラスで定義されている InputFormat に依存します。
Hadoop が単一のファイルを取得し、それを単一の分割として処理するか、ファイルを複数の分割に分割するかを示す、構成可能なオプションがいくつかあります。
InputFormat.isSplittable()
実装を参照してくださいmapred.min.split.size
との2 つのプロパティを構成できます。mapred.max.split.size
最小サイズは入力フォーマットによってオーバーライドされる場合があることに注意してください (最小入力サイズが固定されている場合があります)。詳細を知りたい場合、およびソースを確認することに慣れている場合は、getSplits()
メソッドを確認してくださいFileInputFormat
(新しい API と古い API のメソッドは同じですが、若干の違いがある場合があります)。
map-reduce ジョブ (または pig/hive ジョブ) を送信すると、Hadoop は最初に入力分割を計算します。各入力分割サイズは通常、HDFS ブロック サイズに等しくなります。たとえば、サイズが 1GB のファイルの場合、ブロック サイズが 64MB の場合、16 の入力分割があります。ただし、分割サイズは、HDFS ブロック サイズよりも小さい/大きいように構成できます。入力分割の計算は FileInputFormat で行われます。これらの入力分割ごとに、map タスクを開始する必要があります。
ただし、次のプロパティを構成することで、入力分割のサイズを変更できます。
mapred.min.split.size: The minimum size chunk that map input should be split into.
mapred.max.split.size: The largest valid size inbytes for a file split.
dfs.block.size: The default block size for new files.
入力分割の式は次のとおりです。
Math.max("mapred.min.split.size", Math.min("mapred.max.split.size", blockSize));
ここで例を確認できます。