症状:使用Multiple发现小文件没有写入
原因:没有close 文件未关闭
private MultipleOutputs<IntWritable,Text> mos;
protected void cleanup(Context context) throws IOException,InterruptedException {
mos.close();
}
症状:在combiner中将原本不同的key值改成一样的,结果reduce时还是分到不同的reducer上
原因:partition 可能在combiner之前进行(推测 待分析源码)
解决:重写combiner
症状:遍历iterator加入的新项目都相同
原因:reduce中Iterable<Writable> values 遍历时对象是重用的(待分析源码)
都指向同一引用,如果直接加入链表会造成所有元素相同
解决:如果要保留遍历的对象,要新建
for(Writable w:values)
{
System.out.println(w.hashCode());
}