用户工具


思路

  • 为job添加一个Combiner,或压缩中间结果,减少网络传输
  • 合理Map和Reduce任务的数量

参数调优

  • io.sort.mb

    (default 100)当map task开始运算,并产生中间数据时,其产生的中间结果并非直接就简单的写入磁盘。而是会利用到了内存buffer来进行已经产生的部分结果的缓存,当缓存快满时才写入本地磁盘。如果map的产生数据非常大,那就把io.sort.mb调大,那写满缓存次数就势必会降低,map task对磁盘的操作就会变少。

  • io.sort.spill.percent

    (default 0.80,也就是80%)map在运行过程中,不停的向该buffer中写入已有的计算结果。但是map并不是要等到将该buffer全部写满时才进行spill(spill就是缓存溢出需要写入磁盘),因为如果缓存全部写满了再去写spill,势必会造成map的计算部分等待buffer释放空间的情况。所以,map其实是当buffer被写满到一定程度(比如80%)时,就开始进行spill,io.sort.spill.percent就是指定这个阀值。通常情况下我们调整io.sort.mb会更方便

  • mapred.reduce.parallel

    默认情况下,每个reduce只会有5个并行的下载线程在从map下数据,如果一个时间段内job完成的map有100个或者更多,那么reduce也最多只能同时下载5个map的数据,所以这个参数比较适合map很多并且完成的比较快的job的情况下调大,有利于reduce更快的获取属于自己部分的数据。对于较大集群,可调整为16~25