ここではユースケースです:すべてのレデューサーによって生成されるレコードの数をまとめて制限します
入力URLはマップで読み取られ、後で一部のフィルタリング後に出力されます。次に、パーティションはホスト名に基づいてパーティションを分割します。
map-reduceジョブを実行した後に出力URLにグローバルな制限があります。私はこれをすべての還元剤に均等に分配します。 すなわちグローバルリミットが1000、リダクサ数が5の場合、すべてのリデューサは出力として最大1000/5 = 200のURLを出力します。
2つのホストからのURLがある場合(ユーザー入力)、これらの2つのホストのそれぞれ100000個のURLがある場合、 これらのURLを処理する2つの縮小(同じホスト、同じパーティション)では、出力するURLはそれぞれ200個に制限されます。 レストリデューサーは、パーティショニングのために処理するデータを取得せず、0レコードを出力します。
私は100000個のURL /ホストと1000個のグローバル制限を持っていますが、出力には400個のURLしかありません(200個のURL /ホスト)。
私は同じホストからのURLが一緒にグループ化され、さらなるロジックを簡素化するので、ホスト名でパーティション分割する必要があります。クリーンアップは、ハーフープマップフローの一部または提案されたメカニズムの一部ですか?もっと詳しく説明してください。 –
あなたはあなたのレデューサークラスでこの機能を上書きすることができます。 reduce関数では、レコードを書き込むのではなくコンテナに格納するだけです。クリーンアップ機能では、通信を行い、現在のレデューサーが書き出す必要があるレコードの数を決定できます。次のページのクリーンアップ機能を探してください:http://hadoop.apache.org/common/docs/r0.20.2/api/org/apache/hadoop/mapreduce/Mapper.html – root1982