0

入力ファイル F によって供給される m マッパーを使用する map-reduce ジョブを想定します。明らかに、mapreduce フレームワークは F をチャンク (デフォルト値として 64 MB) に分割し、各チャンクをマッパーに供給します。私の質問は、この mapreduce ジョブを数回実行した場合、チャンクが形成される方法はそれらすべてで同じですか? つまり、mapreduce フレームワーク分割 F のポイントは同じままですか、それとも異なる可能性がありますか?

例として、F に次の行が含まれているとします。

1,2

3,5

5,6

7,6

5,5

7,7

最初の実行では、mapreduce は次のように 2 つのチャンクを形成します。

チャンク 1:

1,2

3,5

5,6

チャンク 2:

7,6

5,5

7,7

私の質問は、分割を再度実行した場合、分割の方法が同じままであるかどうかです。

さらに、各チャンクにはマッパーで使用できる一意の名前がありますか?

4

1 に答える 1

1

私の質問は、分割を再度実行しても分割の方法が同じままかどうかです。

入力データが最初にチャンクに分割され、次にこれらのチャンクのそれぞれがマッパーに供給されるのは事実です。ただし、常に 64M とは限りません。おそらく、HDFS ブロック (通常は 64M) と MR 分割について混乱しているかもしれません。両者は全くの別物です。ただし、分割サイズとブロック サイズが同じである可能性があります。

実際の質問になりますが、同じ InputFormat を使用しているすべてのジョブで同じです。理由は、分割を作成するために使用しているInputFormatの仕事だからです。正確には、InputFormat のgetSplits(JobContext context)内のロジックが分割の作成を管理します。したがって、すべてのジョブで同じであれば、分割の作成も同じになります。

さらに、各チャンクにはマッパーで使用できる一意の名前がありますか?

各チャンクには次の 2 つがあります。

  • バイト単位の長さ。
  • 単なるホスト名文字列である一連の保存場所。

編集 :

マッパーによって実行されているファイルの名前を取得する方法:

FileSplit fileSplit = (FileSplit)context.getInputSplit();
String filename = fileSplit.getPath().getName();

これで、このファイルでFSDataInputStreamを開いて、その内容を読み取ることができます。

それがあなたの質問に答えることを願っています。

于 2013-09-17T19:57:03.637 に答える