レデューサー1のメモリーにファイルAを、レデューサー2のメモリーにファイルBを保持したい。これは、Hadoopで分散キャッシュテクノロジーを使用して可能ですか?または、これを達成する他の方法はありますか?
ありがとう
レデューサー1のメモリーにファイルAを、レデューサー2のメモリーにファイルBを保持したい。これは、Hadoopで分散キャッシュテクノロジーを使用して可能ですか?または、これを達成する他の方法はありますか?
ありがとう
はい、ファイルがかなり小さい場合は、これらのファイルを分散キャッシュに設定できます。このリンクhttp://developer.yahoo.com/hadoop/tutorial/module5.html#auxdataに従ってください。それはあなたに役立つかもしれません。
そして、コードのこの部分を考えると、どのファイルをどのレデューサーで処理するか次第です。
Path [] cacheFiles = DistributedCache.getLocalCacheFiles(conf);
if (null != cacheFiles && cacheFiles.length > 0) {
for (Path cachePath : cacheFiles) {
if (cachePath.getName().equals(stopwordCacheName)) {
loadStopWords(cachePath);
break;
}
}
それが役立つかどうかを確認してください
問題 (および Hadoop の根本的な問題) は、タスク トラッカーがタスクごとに新しい JVM プロセスを起動し、メモリ内キャッシュの利点を無効にすることです。タスク トラッカーを同じ VM で実行するように構成できますが、多くの Hadoop 内部で System.exit() を使用し、非常に多くの Hadoop ジョブも使用されています。このような構成は無意味です。
GridGain クラスターを Hadoop クラスターと一緒に共同展開し、同じ物理ホスト (GridGain と Hadoop のタスク トラッカー JVM) 上の 2 つの JVM 間のクイック ループバック接続を介してメモリ内キャッシュに GridGain を使用できます。これは、いくつかのクライアントによって行われます。 .