1:如果存在大量的小数据文件,那么就会建立很多的Map和Reduce任务,Map和Reduce任务都是进程,进程的创建需要很多的资源消耗,那么会造成Map和Reduce任务的
创建时间比计算任务的时间要长,非常不划算。
2:推测执行可能会浪费多余的资源,所以为了资源的更充分利用,我们把它关闭,在资源不紧张的时候可以开启。
3:开启jvm重用后,就不必开启一些进程,节省了资源和时间。
4:增加InputSplit大小,因为一个InputSplit对应一个Map任务,InputSplit少了,那么Map任务就少了,那么占用的资源就少了。
5:增大map输出的缓存, 当map输出缓存满时,需要写到Linux本地磁盘,如果缓存太小,那么写磁盘次数增加,磁盘的I/O增加。
6:增加合并spill文件数量,map输出缓存里的数据写到磁盘的过程叫做Spill, 如果一个文件很大的话,那么会在磁盘上产生很多文件,map端最后会把这些文件
合并为一个文件,过程为合并,如果增加合并spill文件数量的话,那么合并的次数会减少,
7:map端输出压缩,占用的磁盘少,占用网络带宽少。
8:增大shuffle复制线程数,shuffle即数据从map端送到reduce端的过程,从reduce端发起请求,在map端通过Http协议复制过去,复制的时候,并发线程数增加,那么
吞吐量增大,时间减少:,网络带宽的占用就高了。
9:设置单个节点的map和reduce执行数量,任务数增加,那么单机可以执行更多的任务,但是内存占用会增加。