hadoop streaming内存超限解决方案

场景:运行的一个streaming的mapper-reducer任务需要读入一个2g大小的词表作为辅助分析数据,然后不出意外的,内存超限。

解决方案:
1.提高内存上限:
增加配置,将上限调高到8000M,这样就解决了,如下:
-D stream.memory.limit=8000

2.将读入词表的操作转到reducer阶段完成:
这样需要点思路转换,我需要对比的key是地理位置,词表的key也是地理位置,可以在reducer阶段将它们归并起来做处理,缺点就是麻烦了些。

3.优化读入数据:
提高内存上限到底是治标不治本,应当避免读入这种大数据,举个例子,我的解决方案是把词表用hash的方式转化为数字,大小从原来的2g变为400m,顺利运行,速度提高。

以上,就是个人碰到hadoop内存超限的解决方法了。

你可能感兴趣的:(hadoop)