4

通常の Java アプリケーションから map-reduce ジョブを呼び出せることはわかっています。私の場合、map-reduce ジョブは、hdfs 上のファイルと他のファイルシステム上のファイルを処理する必要があります。hdfs上のファイルを同時に使用しながら、他のファイルシステムからファイルにアクセスできることは、hadoopで可能ですか。それは可能ですか?

したがって、基本的に私の意図は、並列計算のためにHDFSに入れたい大きなファイルが1つあり、このファイルのブロックを他のファイルと比較することです(アクセスする必要があるため、HDFSに入れたくありません)フルレングスファイルとして一度に。

4

2 に答える 2

2

他のタスクと同様に、mapper/reducer タスクから非 HDFS ファイル システムにアクセスできる必要があります。注意すべきことの 1 つは、たとえば 1K マッパーがあり、それぞれが非 HDFS ファイルを開こうとする場合、外部ファイル システムのタイプに基づいてボトルネックが発生する可能性があることです。データベースからデータをプルするマッパーにも同じことが当てはまります。

于 2012-11-02T00:01:04.527 に答える
1

分散キャッシュを使用してファイルをマッパーに配布できます。マッパーはconfigure()メソッドでファイルを開いて読み取ることができます(map()何度も呼び出されるため、ファイルを読み取らないでください)。

編集

マップリデュースジョブのローカルファイルシステムからファイルにアクセスするために、ジョブ構成をセットアップするときにそれらのファイルを分散キャッシュに追加できます。

JobConf job = new JobConf();
DistributedCache.addCacheFile(new URI("/myapp/lookup.dat#lookup.dat"), job);

MapReduceフレームワークは、マッパーがこれらのファイルにアクセスできるようにします。

public void configure(JobConf job) {
    // Get the cached archives/files
    Path[] localFiles = DistributedCache.getLocalCacheFiles(job);

    // open, read and store for use in the map phase.
}

仕事が終わったらファイルを削除します。

于 2012-11-01T21:26:23.623 に答える