2

HDFS が使用されていない場合のデータの局所性に似ていますが、HDFS に固有です。

2 つの Hadoop クラスターがあり、クラスター B から大きなデータセット (100GB) を読み取り、それをクラスター A から小さなデータセット (10 行) に結合するクラスター A JobTracker に pig ジョブを送信しています。

b_data = load 'hdfs://b-cluster/big.txt' as ( customer_id: chararray);
a_data = load 'hdfs://a-cluster/small.txt' as ( customer_id: chararray);
j_data = join a_data by acct_id left, b_data by customer_id;
dump j_data;

驚くべきことに、それは機能します + クラスター A でローカル データセットのみを操作する場合とほぼ同じ時間 (約 10 分) かかります

技術的に何が起こっているのですか?タスクトラッカーは A ノードのみで実行されていますか? B データノードからデータセットをどのように読み取っていますか? データの局所性を享受できない可能性があるのに、なぜそんなに速いのでしょうか?

ありがとう!

4

1 に答える 1

1

実際には、HDFS クラスターと MapReduce クラスターは、同期の観点からは何の関係もありません...完全に独立しています。たまたま、データの局所性を利用するためにそれらを同じ場所に配置することがよくあります.

ジョブ トラッカーはデータ ローカルな方法でジョブを割り当てることを好みますが、それができない場合は、任意のタスク トラッカーにジョブを送信します*。その時点で、ローカル HDFS または離れた HDFS からの読み取りは、同じメカニズム、つまりネットワーク経由で行われます。プロトコルは同じなので問題ありません!

なぜスローダウンに気付かないのか、よくわかりません! 高速ネットワーク (10GigE?) を使用している可能性があります。タスク トラッカーは、ネットワークを介して離れたデータ ノードから確実にデータを取得しています。しかし、それはこれを並行して行っています。もっと大きなスケールで気づくと思います。

* ラックの局所性のステップを無視しています

于 2013-08-05T17:15:34.930 に答える