1

何かが足りないようです。データのレデューサーの数によって HDFS にその数のファイルが作成されますが、データは複数のファイルに分割されません。私が気付いたのは、group by次のデータがキーに基づいて2つのファイルにうまく分割されているように、連続した順序でキーを実行すると正常に機能することです。

1    hello
2    bla     
1    hi
2    works
2    end

しかし、このデータは分割されません:

1    hello
3    bla     
1    hi
3    works
3    end

私が使用したコードは、一方では正常に機能し、他方では正常に機能しません

InputData = LOAD 'above_data.txt';
GroupReq =  GROUP InputData BY $0 PARALLEL 2;
FinalOutput =   FOREACH GroupReq GENERATE flatten(InputData);
STORE FinalOutput INTO 'output/GroupReq' USING PigStorage ();

上記のコードは 2 つの出力パーツ ファイルを作成しますが、最初の入力ではデータを適切に分割し、 key 1inpart-r-00000と key 2inを配置しpart-r-00001ます。しかし、2 番目の入力では 2 つの部分ファイルが作成されますが、すべてのデータは最終的にpart-r-00000. 何が足りないのですか? 一意のキーに基づいてデータを強制的に複数の出力ファイルに分割するにはどうすればよいですか?

注: 2 番目の入力PARALLEL 3(3 つのレデューサー) を使用する場合、3 つの部分ファイルが作成され、キー入力のすべてのデータとキー入力ファイルのすべてのデータが追加1part-03ますpart-3。この振る舞いは奇妙だと思いました。ところで、Cloudera CDH3B4 を使用しています。

4

1 に答える 1

1

これは、キーが移動するレデューサーの数がとして決定されるためhash(key) % reducersCountです。キーが整数の場合、hash(key) == key。より多くのデータがある場合、それらはほぼ均等に分散されるので、心配する必要はありません。

于 2011-04-05T05:46:50.187 に答える