8

分散キャッシュを使用して、マッパーがデータにアクセスできるようにしたいと考えています。主に、私はコマンドを使用しています

DistributedCache.addCacheFile(new URI("/user/peter/cacheFile/testCache1"), conf);

/user/peter/cacheFile/testCache1 は hdfs に存在するファイルです

次に、セットアップ関数は次のようになります。

public void setup(Context context) throws IOException, InterruptedException{
    Configuration conf = context.getConfiguration();
    Path[] localFiles = DistributedCache.getLocalCacheFiles(conf);
    //etc
}

ただし、この localFiles 配列は常に null です。

最初はテスト用に単一ホスト クラスターで実行していましたが、これにより分散キャッシュが機能しなくなると読みました。擬似分散で試しましたが、それもうまくいきませんでした

Hadoop 1.0.3 を使用しています

ありがとうピーター

4

4 に答える 4

35

ここでの問題は、私が次のことをしていたことでした:

Configuration conf = new Configuration();
Job job = new Job(conf, "wordcount");
DistributedCache.addCacheFile(new URI("/user/peter/cacheFile/testCache1"), conf);

Job コンストラクターは conf インスタンスの内部コピーを作成するため、後でキャッシュ ファイルを追加しても影響はありません。代わりに、これを行う必要があります。

Configuration conf = new Configuration();
DistributedCache.addCacheFile(new URI("/user/peter/cacheFile/testCache1"), conf);
Job job = new Job(conf, "wordcount");

そして今、それは機能します。助けてくれた Hadoop ユーザー リストの Harsh に感謝します。

于 2012-12-09T02:27:46.527 に答える
11
Configuration conf = new Configuration();  
Job job = new Job(conf, "wordcount");
DistributedCache.addCacheFile(new URI("/userpetercacheFiletestCache1"),job.getConfiguration());

このようにすることもできます。

于 2013-02-11T09:53:51.780 に答える
4

ジョブが構成オブジェクトに割り当てられると、つまりConfiguration conf = new Configuration();

Job job = new Job(conf, "wordcount");

次に、以下に示すように conf の属性を処理する場合、たとえば

conf.set("demiliter","|");

また

DistributedCache.addCacheFile(new URI("/user/peter/cacheFile/testCache1"), conf);

このような変更は、ローカル環境でどのように機能しても、疑似クラスターまたはクラスターには反映されません。

于 2013-06-06T09:03:48.817 に答える