3

分散キャッシュが Hadoop でどのように機能するかを誰かが説明できるかどうか疑問に思っています。ジョブを何度も実行していますが、実行するたびに、各ノードのローカル分散キャッシュ フォルダーのサイズが大きくなっていることに気付きました。

複数のジョブが分散キャッシュ内の同じファイルを再利用する方法はありますか? それとも、分散キャッシュは個々のジョブの存続期間中のみ有効ですか?

私が混乱している理由は、Hadoop のドキュメントに「DistributedCache はキャッシュ ファイルの変更タイムスタンプを追跡する」と記載されているため、タイム スタンプが変更されていない場合は、再キャッシュまたは再キャッシュする必要はないと思われるからです。 -ファイルをノードにコピーします。

以下を使用して、分散キャッシュにファイルを正常に追加しています。

DistributedCache.addFileToClassPath(hdfsPath, conf);
4

3 に答える 3

2

DistributedCache は参照カウントを使用してキャッシュを管理します。org.apache.hadoop.filecache.TrackerDistributedCacheManager.CleanupThread参照カウントが 0 の CacheDirs のクリーンアップを担当します。1 分ごとにチェックします (デフォルトの期間は 1 分です。「mapreduce.tasktracker.distributedcache.checkperiod」で設定できます)。

ジョブが終了または失敗すると、JobTracker は TaskTrackers に を送信しますorg.apache.hadoop.mapred.KillJobAction。次に、TaskTracker が KillJobAction を受け取ると、アクションを tasksToCleanup に配置します。TaskTracker には、taskCleanupThread というバックグラウンド スレッドがあり、taskToCleanup からアクションを取得してクリーンアップ作業を行います。KillJobAction の場合、purgeJob を呼び出してジョブをクリーンアップします。このメソッドでは、この Job ( rjob.distCacheMgr.release();) が使用する参照カウントを減らします。

上記の分析はに基づいていhadoop-core-2.0.0-mr1-cdh4.2.1-sources.jarます。も確認したhadoop-core-0.20.2-cdh3u1-sources.jarところ、この 2 つのバージョンにはわずかな違いがあることがわかりました。たとえば、 には がありませんでしorg.apache.hadoop.filecache.TrackerDistributedCacheManager.CleanupThread0.20.2-cdh3u1。ジョブを初期化するとき、TrackerDistributedCacheManager は、このジョブの新しいキャッシュ ファイルを配置するのに十分なスペースがあるかどうかを確認します。そうでない場合は、参照カウントが 0 のキャッシュを削除します。

cdh4.2.1 を使用している場合は、「mapreduce.tasktracker.distributedcache.checkperiod」を増やして、クリーンアップ作業を遅らせることができます。次に、複数のジョブが同じ分散キャッシュを使用する確率が増加します。

cdh3u1 を使用している場合は、キャッシュ サイズの制限 (「local.cache.size」、デフォルトは 10G) とキャッシュの最大ディレクトリ (「mapreduce.tasktracker.cache.local.numberdirectories」、デフォルトは 10000) を増やすことができます。 )。これは cdh4.2.1 にも適用できます。

于 2013-08-31T09:10:50.050 に答える
0

これによると:http://www.datasalt.com/2011/05/handling-dependencies-and-configuration-in-Java-hadoop-projects-effectively/

「-libjars」の代わりにDistributedCache APIを介してこれを行うことができるはずです

于 2014-08-11T14:16:33.990 に答える