10

私の mapreduce ジョブで、リデューサー部分の出力がキーでソートされていることがわかります..

したがって、レデューサーの数を 10 に設定した場合、出力ディレクトリには 10 個のファイルが含まれ、それらの各出力ファイルには並べ替えられたデータが含まれます。

ここに記載している理由は、すべてのファイルのデータがソートされていても、これらのファイル自体はソートされていないためです。たとえば、part-000* ファイルが 0 から始まり、zzzz で終わるシナリオがあります。 Text をキーとして使用します。

ファイル内でもファイルをソートする必要があると想定していました。つまり、ファイル 1 には a があり、最後のファイル部分には 00009 に zzzz または atleaset > a のエントリが必要です。

すべてのアルファベットが均一に分散されたキーを持っていると仮定します。

なぜそのような振る舞いをするのか

4

4 に答える 4

12

これらの方法を使用して、グローバルにソートされたファイル (基本的に必要なもの) を実現できます。

  1. mapreduce でレデューサーを 1 つだけ使用する (悪い考えです!! これは 1 台のマシンに負荷がかかりすぎます)
  2. カスタム パーティショナーを作成します。partioner は mapreduce でキー空間を分割するクラスです。デフォルトのパーティショナー ( Hashpartioner ) は、キー スペースをレデューサーの数に均等に分割します。カスタムパーティショナーの作成については、この例を確認してください。

  3. Hadoop Pig/Hive を使用して並べ替えを行います。

于 2013-01-14T16:56:32.330 に答える
1

トータルソート

特定の Key からのすべてのキーと値のペアは、特定の Reducer に到達します。これは、マッパー レベルのパーティショナーを通じて行われます。マッパー レベルのコンバイナーはセミ レデューサーとして機能し、特定のキーの値をレデューサーに送信します。HashPartitionerは、レデューサーの数を決定するのに最適なパーティショナーです。

レデューサーの出力は、すべての出力がキーに基づいてソートされた単一のファイルになります。

二次ソート

マップ出力キーのソート方法を定義するために使用されます。Mapper レベルで動作します。この場合、キーとともに値の順序を制御できます。つまり、2 つ以上のフィールド値に対してソートを実行できます。

総順ソート二次ソートをご覧ください

于 2015-11-03T15:25:31.080 に答える
0

Hive order by は単一のレデューサーを使用するため、distribute by/sort by を使用して、ソートされたテーブルから、insert overwrite local from table -- データをファイルに書き込むことができます。

于 2014-07-21T21:47:37.067 に答える
0
Q :all the files have sorted data but these files itself are not sorted..

回答:デフォルトでは、(マッパーからの) 中間出力を分割するために、カスタム Hashpartitionerが使用されます。

元:

If the intermediate values are 3,4,5,6,7,8,9,10,11
Then the data will be partitioned into (lets say) Reducer: 
R1{7,4,10}
R2{5,11,8}
R3{9,6,3}

これでフラットファイルは

Part-00000 {4,,7,11}
Part-00001 {5,8,11}
Part-00002 {3,6,9}

値によるソートを探している場合:ここに ans があります

于 2013-01-15T05:09:57.687 に答える