0

私のプログラムは DistributedCache を使用してファイルをキャッシュします

JobConf conf = new JobConf(new Configuration(), ItemMining.class);
DistributedCache.addCacheFile(new URI("output1/FList.txt"), conf);
DistributedCache.addCacheFile(new URI("output1/GList.txt"), conf);

ファイルを取得します

configure(){

..
localFiles = DistributedCache.getLocalCacheFiles(job);
FileSystem fs = FileSystem.get(job);
FSDataInputStream inF = fs.open(localFiles[0]);
..

}

プログラム全体を実行して、Eclipse で正しい結果を得ることができます。しかし、Hadoop クラスターで実行すると、この部分が呼び出されないことがわかりました。なぜこれが起こるのですか?構成で何かを設定する必要がありますか?

4

1 に答える 1

0

問題は解決しました。私は 2 つの間違いを犯したことがわかりました。

1) configure() の先頭に System.out.println() を追加しましたが、表示されませんでした。必要に応じて、mapreduce フェーズで System.out.println() を使用できないことが判明しました。それを確認するには、ログを確認する必要があります。詳細については、Where does hadoop mapreduce framework send my System.out.print() statements ? (標準出力)

2) 私の本当のエラーは DistributedCache に関連しています。ファイルを追加してメモリに読み込みたいのですが、パスを開くには、次のように FileSystem.getLocal() が必要です。

    localFiles = DistributedCache.getLocalCacheFiles(job);
    FileSystem fs = FileSystem.getLocal(job);
    FSDataInputStream inF = fs.open(localFiles[0]); 

Hadoopのおかげ: DistributedCache からファイルを取得するときの FileNotFoundExcepion

于 2013-04-15T16:48:35.147 に答える