hdfsのファイルが実行中のノードに保存されているかどうかを各マッパーがチェックするジョブを書きたいと思います.これが起こらない場合は、hdfsからファイルを取得して、このノードにローカルに保存したいと思います.これは可能ですか? ?
編集:私はこれをやろうとしています(3)ここで説明されているように、再分割結合の前処理:リンク
Hadoop のDistributedCache機能を使用して、ジョブの完了に必要なサイド データまたは補助データを配布できます。ここ(1、2)は、同じことに関する興味深い記事です。
なぜこれをしたいのですか?Hadoop で使用されるデータ ローカリティの原則がこれを行います。データを移動するのではなく、プログラムを移動します。
これは、Hadoop に関するウィキペディアのページからのものです。
jobtracker は、データの場所を認識して、map/reduce ジョブを tasktracker にスケジュールします。この例は、ノード A にデータ (x、y、z) が含まれ、ノード B にデータ (a、b、c) が含まれている場合です。ジョブトラッカーは、ノード B が (a,b,c) に対してマップ/リデュース タスクを実行するようにスケジュールし、ノード A が (x,y,z) に対してマップ/リデュース タスクを実行するようにスケジュールします。
また、計算がデータに移動され、その逆ではない理由は、Hadoop のドキュメント自体で説明されています。
「計算の移動はデータの移動よりもコストがかからない」 アプリケーションによって要求された計算は、操作対象のデータの近くで実行されると、はるかに効率的になります。これは、データセットのサイズが巨大な場合に特に当てはまります。これにより、ネットワークの輻輳が最小限に抑えられ、システム全体のスループットが向上します。多くの場合、アプリケーションが実行されている場所にデータを移動するよりも、データが配置されている場所の近くに計算を移行する方がよいという前提があります。HDFS は、アプリケーションがデータのある場所に近づくためのインターフェイスを提供します。