0

反復プロセスで数十テラバイトの大量のデータをフィルタリングする必要があるという問題があります。サイズが大きいため、データをネットワーク経由で再転送する必要がないように、2 つの連続したマップ フェーズで計算を行いたいと考えています。

したがって、アルゴリズムのステップは、1) すべてのデータを分析して決定を下し、2) 同じデータを再実行し、1 の決定に基づいてフィルタリング プロセスを実行します。

これを解決するには 2 つの方法があると思いますが、それぞれに大きな問題があるようです。

1) ソリューション、ChainMapper。問題: 2 番目のマッパーが開始する前に、最初のマッパーが完全に完了する必要があります。

2) ソリューション、2 つのジョブ。問題: ジョブ間でデータが削除されると、ネットワークを介してデータが再転送されます。

私は何かが欠けていると確信していますが、本当に助けが必要です!

ありがとう

4

1 に答える 1

1

あなたの明確化を考えると:あなたは使用できませんがChainMapper、マッパー1をすべてのキーに適用し、待ってからマッパー2を適用することによって動作しないためです。各入力キーに一連のマップを適用します。フェーズ 1 と 2 を終了してから開始する人もいます。しかし、それによってネットワークを通過するデータが増えるわけではないというあなたの意見は正しいです。ここでは、ディスクにも書き込まれません!

フェーズ 1 を完了する必要があるため、フェーズ 2 で何かを行う前に、マップ フェーズを完了する必要があります。 でフェーズ 1 を実行し、Mapperでフェーズ 2 を実行しReducerます。それは最も簡単です。

奇妙なことに、2 つの Map/Reduce を使用した方が速いかもしれませんが、Reducer. はReducerノーオペレーションの場合がありReducer.classます。コールしsetNumReduceTasks(0)ます。この方法でシャッフル フェーズを回避します。レデューサーにデータをコピーするのではなく、HDFS にダンプするだけです。

通常、次のマッパーは HDFS データの上に生成されます。そこに余分な転送はありません。

データを再編成して再マーシャリングするために、ここでデータ転送を避けるつもりはないと思いますが、計算を支配する可能性は低いと思います。

于 2013-04-26T14:01:20.880 に答える