0

DistributedCache を使用しています。ただし、コードの実行後、キャッシュにはファイルがありません。他の同様の質問を参照しましたが、回答で問題が解決しません。

以下のコードを見つけてください。

   Configuration conf = new Configuration();
   Job job1 = new Job(conf, "distributed cache");
   Configuration conf1 = job1.getConfiguration();
   DistributedCache.addCacheFile(new Path("File").toUri(), conf1);
   System.out.println("distributed cache file "+DistributedCache.getLocalCacheFiles(conf1));

これはnullを与えます..

したがって、マッパー内で同じことを指定すると、null も返されます。あなたの提案を教えてください。

ありがとう

4

4 に答える 4

2

getLocalCacheFiles() の代わりに getCacheFiles() を試してください

于 2013-12-29T16:17:49.333 に答える
1

これは、(少なくとも部分的には) Chris White がここに書いたことによるものだと思います。

Job オブジェクトを作成した後、Job がそのコピーを作成するため、Configuration オブジェクトをプルバックする必要があります。ジョブの作成後に conf2 で値を構成しても、ジョブ自体には影響しません。これを試して:

job = new Job(new Configuration());
Configuration conf2 = job.getConfiguration();
job.setJobName("Join with Cache");
DistributedCache.addCacheFile(new URI("hdfs://server:port/FilePath/part-r-00000"), conf2);

それでもうまくいかない場合は、どこかに別の問題があると思いますが、それは Chris White の指摘が正しくないという意味ではありません。

于 2013-05-06T08:39:18.793 に答える
0

配布するときは、できれば相対パスを使用して、ローカル リンク名を忘れないでください。

URIの形式ですhdfs://host:port/absolute-path#local-link-name

読むとき:

  • 分散キャッシュの可能性を使用しない場合は、HDFS を使用FileSystemしてアクセスすることになっています。hdfs://host:port/absolute-path
  • 分散キャッシュを使用する場合は、標準の Java ファイル ユーティリティを使用してアクセスする必要があります。local-link-name
于 2013-05-06T15:26:24.613 に答える