map-reduce的优化:
需要内存的地方: map/reduce任务运行时内存、存放中间数据的内存缓存区、map输出数据排序内存,
需要操作磁盘的地方: map输出数据缓冲区达到阀值的溢出写文件, map缓冲区满写磁盘,map最后输出写磁盘, shuffle复制map输出的数据缓冲区阀值的溢出写文件,reduce读输入磁盘, 这些都是中间阶段对磁盘的操作。
运行内存越大,运行速度越快; 中间数据越多,即缓冲区越大,读磁盘和写磁盘的次数越少,所以,这是个辩证的过程。如果运行需要的内存少,可以将缓冲区设置大一些。
任务jvm重用, 当运行一个任务的时候,首先会先启动一个jvm,启动时间大概为一秒, 然后初始化,如果有一批运行时间比较短,数量又多的任务的话,在一个jvm中顺序执行这些任务,即jvm重用将会提高性能。 mapred.job.reuse.jvm.num.tasks, 默认值为1,则在各个独立的jvm中运行,如果设置为-1,则该作业的所有任务依次使用该jvm.