前一段时间在写mapreduce来处理数据,背景就是把30亿的数据,进行排序、合并,最终转换成json,拼接json是自己写的,没有用fastjson、jackson等工具,原因是封装好的东西时间消耗严重,不能满足项目需求。
遇到了很多问题,最后都被解决掉了,在这里说一些跑mapreduce的时候,可以调节的一些参数(起码是我用过的,有用的):
mapred.reduce.tasks
(mapreduce.job.reduces
):
默认值:1
说明:默认启动的reduce数。通过该参数可以手动修改reduce的个数。
mapred.child.java.opts
:
默认值:-Xmx200m
说明:jvm启动的子线程可以使用的最大内存。建议值-XX:-UseGCOverheadLimit
-Xms512m -Xmx2048m -verbose:gc -Xloggc:/tmp/@taskid@.gc
mapreduce.reduce.shuffle.merge.percent
:
默认值: 0.66说明:reduce归并接收map的输出数据可占用的内存配置百分比。类似mapreduce.reduce.shuffle.input.buffer.percen属性。
mapreduce.map.memory.mb map任务的最大内存
mapreduce.map.java.opts -Xmx1024M map任务jvm的参数
mapreduce.reduce.memory.mb reduce任务的最大内存
mapreduce.reduce.java.opts -Xmx2560M reduce任务jvm的参数