[Hadoop] reduce爆内存的解决方法
(1) 【join爆内存】
在join之前,对这两部分数据,分别能先reduce的先reduce, 降低join时候分给每个reducer的条目数。
比如要拼接两份数据,每份数据A, B中相同key的条目最多有上百万条。
可以先分别对A, B先进行reduce操作,之后再join,
这样join时候传给每个reducer的相同key的条目数就由百万条,降低为个位数了。
(2) 【指定随机数辅助分reduce】
对于无法按照(1)中处理的情况:
如果直接将相同key的放一个reducer中可能会爆内存;
可以再人为指定辅助key (random_number, key),
比如这个random_number有10种不同的取值,那么相当于之前要分给1个reducer的数据,分给了10个reducer,降低了每个reducer的处理压力。
之后再 按照 原key进行一次reduce。