最近在做数据灌库工作,数据量较大不能基于单机进行灌库,需要编写MR任务。由于做MR开发经验不足,几经优化才满足灌库性能要求,这里总结一下。
如非必要,请规避reduce任务reduce任务涉及跨计算节点拉取数据,shuffle及数据排序,而这些过程都是很耗资源的。
对于灌库任务来说,我们没有必要对数据做排序,完全不要reduce任务,不要画蛇添足地去将reduce设置为cat,看上去cat只是作了数据的打印,但因此引入的资源消耗是很大的
最简单的规避reduce任务的方式就是设置reduce为NONE,如
hadoop streaming \
-D fs.default.name=${NJ_HDFS_NAME}\
-D hadoop.job.ugi=${RANK_RP_UGI}\
-D mapred.job.tracker=${JOB_TRACKER}\
-D mapred.job.map.capacity=${capacity}\
-D mapred.map.over.capacity.allowed=false\
-D mapred.job.priority=VERY_HIGH\
-D mapred.job.queue.name=rank-rp\
-D mapred.job.name=import2redis_showlist\
-files conf\
-files monitor\
-file bin/import2redis.sep\
-input ${input_path}/part-*\
-output ${output_path}\
-mapper "./import2redis.se