0

私のユースケースでは、不良品を見つける必要があります...たとえば、hdfsに良品/不良品とマークされた数百万の商品の製品リストがあるとします....不良品の最初の10件の一致を見つけて、停止します。

これを行うためにカウンターを使用することを考えていましたが、カウンターはすべてタスクトラッカーレベルにあるようです...したがって、すべてのタスクトラッカーは、ジョブが完了するまで実際には集約されない独自のカウンターのコピーを維持します。したがって、1つのスプリットのマップジョブで実行されているカウンターは、別のマップがすでに10個のアイテムを検出したかどうかを認識しません。

これを解決する方法について何かアイデアはありますか?

4

2 に答える 2

1

マップ タスクでローカルの上位 10 レコードを見つけて、それらをレデューサーに送信します。したがって、マッパーが 7 人いる場合、リデューサーは 70 レコードを取得します。レデューサーは、これらの 70 レコードを並べ替えて、グローバルな上位 10 レコードを出力する必要があります。これが同じコードです。

このアプローチは、1 つ以上のレデューサーではなく、1 つのレデューサーでのみ機能し、これがボトルネックになる可能性があることに注意してください。また、マッパー間の通信がないため、レデューサーの負担を軽減する方法がありません。マッパーがグローバル データを使用して相互に対話できるこのペーパーを確認してください。IBM BigInsightsはそれを実装します。

多くのパターンについては、このブログ エントリを確認してください。

于 2013-03-19T03:25:39.330 に答える
0

Hadoop を使用していると仮定すると、カウンターもグローバルに利用できます。

ただし、この問題に Map Reduce を使用する理由がわかりません。

于 2013-03-18T23:22:32.233 に答える