0

いくつかのデータを保存するファイルがあります。このデータは、すべてのマッパーがいくつかの計算に使用する必要があります。

私はファイルからデータを読み取る方法を知っており、これはマッパー関数内で行うことができますが、このデータはすべてのマッパーで同じなので、マッピングプロセスが行われる前にどこかに(変数)保存してから使用したいと思いますマッパーのコンテンツ。

これをmap関数で実行し、たとえば入力として10行のファイルがある場合、map関数は10回呼び出されますよね?したがって、map関数でファイルの内容を読み取ると、10回読み取ることになります。これは不要です。

前もって感謝します

4

2 に答える 2

0

マッパーの多くは別のJVM内で(場合によっては別のマシンで)実行されるため、Hadoopに送信する前にデータをアプリケーションに読み込むことはできません。ただし、分散キャッシュを使用して、「アプリケーション固有の大きな読み取り専用ファイルを効率的に分散する」ことができます。

そのリンクによると、「その効率は、ファイルがジョブごとに1回だけコピーされるという事実と、スレーブでアーカイブされていないアーカイブをキャッシュする機能に由来します。」

于 2012-05-04T21:06:43.533 に答える
0

私が正しく理解していれば、ファイル内のすべての行を読み取るために1つの関数のみを呼び出したいと思います。はいと仮定して、これが私の見解です。

マッパーを使用すると、安全のために一度に1行を読み取ることができるため、読み取る入力の行数を制御できます。そして、これにはある程度のメモリが必要です。一例として、ファイルが1GBサイズのように大きい場合はどうなりますか。すべての内容を読んでよろしいですか?これはかなりの量のメモリを消費し、パフォーマンスに影響を与えます。これは先ほど申し上げた安全面です。

私の結論は、ファイルのすべての内容を読み取るマッパー関数はないということです。同意しますか?

于 2012-05-07T05:10:02.677 に答える