削減フェーズの削減プログラムで MultipleOutputs を使用しています。私が取り組んでいるデータ セットは約 270 mb で、擬似分散単一ノードでこれを実行しています。マップの出力値に書き込み可能なカスタムを使用しました。キーはデータセットに存在する国です。
public class reduce_class extends Reducer<Text, name, NullWritable, Text> {
public void reduce(Text key,Iterable<name> values,Context context) throws IOException, InterruptedException{
MultipleOutputs<NullWritable,Text> m = new MultipleOutputs<NullWritable,Text>(context);
long pat;
String n;
NullWritable out = NullWritable.get();
TreeMap<Long,ArrayList<String>> map = new TreeMap<Long,ArrayList<String>>();
for(name nn : values){
pat = nn.patent_No.get();
if(map.containsKey(pat))
map.get(pat).add(nn.getName().toString());
else{
map.put(pat,(new ArrayList<String>()));
map.get(pat).add(nn.getName().toString());}
}
for(Map.Entry entry : map.entrySet()){
n = entry.getKey().toString();
m.write(out, new Text("--------------------------"), key.toString());
m.write(out, new Text(n), key.toString());
ArrayList<String> names = (ArrayList)entry.getValue();
Iterator i = names.iterator();
while(i.hasNext()){
n = (String)i.next();
m.write(out, new Text(n), key.toString());
}
m.write(out, new Text("--------------------------"), key.toString());
}
m.close();
}
}
上記は私の削減ロジックです
問題
1) 上記のコードは小さなデータ セットでは問題なく動作しますが、270 MB のデータ セットではヒープ スペースが原因で失敗します。
2) 国をキーとして使用すると、単一の反復可能なコレクションでかなり大きな値が渡されます。これを解決しようとしましたが、MutlipleOutputs は特定のキー セットに対して一意のファイルを作成します。ポイントは、以前のreduceの実行によって作成された既存のファイルを追加できず、エラーがスローされることです。したがって、特定のキーについては、新しいファイルを作成する必要があります。これを回避する方法はありますか? . 上記のエラーを解決すると、キーを国名 (最終的に並べ替えられたデータ) として定義することになりましたが、Java heap error がスローされます。
サンプル入力
3858241,"Durand","Philip","E.","","","Hudson","MA","US","",1 3858241,"Norris","Lonnie","H. ","","","ミルフォード","マサチューセッツ州","US","",2 3858242,"グッディング","エルウィン","R.","","120 ダーウィン ロード"," Pinkney","MI","US","48169",1 3858243,"Pierron","Claude","Raymond","","","エピナル","","FR","", 1 3858243,"ジェニー","ジャン","ポール","","","デシネス","","FR","",2 3858243,"ズッカロ","ロバート",""," "、"","エピナル","","FR","",3 3858244,"マン","リチャード","L.","","PO Box 69","ウッドストック","CT"," US","06281",1
小さなデータセットの出力例
サンプルディレクトリ構造...
CA-r-00000
FR-r-00000
Quebec-r-00000
TX-r-00000
US-r-00000
*個別内容*
3858241 フィリップ・E・デュランド
ロニー・H・ノリス
3858242
エルウィン・R・グッディング
3858244