症状:使用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());
}
本文针对MapReduce编程中常见的几个问题进行了深入分析,包括小文件未能成功写入、combiner修改key值后数据仍分散处理及遍历迭代器时出现重复项等问题,并提供了相应的解决方案。
8744

被折叠的 条评论
为什么被折叠?



