Hadoop优化

一、影响MR程序效率的因素

  1.计算机性能:

  CPU、内存、磁盘、网络,

  计算机的性能会影响MR程序的速度与效率

  2.I/O方面

   1)数据倾斜(代码优化)

   2)map和reduce数量设置不合理(通过配置文件后代码中设置)

   3)map运行时间过长,导致reduce等待时间过长

   4)小文件过多(浪费元数据资源,CombineTextInputFormat)

   5)不可分快的超大文件(不断溢写)

   6)多个溢写小文件需要多次合并。

 

二、MR的优化方法

  MR优化的六个方面:数据输入、map阶段、reduce阶段、IO传输、数据倾斜、参数调优

  1.数据输入

    1)合并小文件:在执行mr任务前就进行小文件合并

    2)采用CombineTextInputFormat来作为输入,解决输入端大量小文件的场景

    MR程序不适合处理大量小文件

  2.Map阶段

    1)减少溢写次数:

    //修改内存大小:mapreduce.task.io.sort.mb

    //修改默认溢写百分百:mapreduce.mps.sort.spill.percent

    2)减少合并次数

    //mapreduce.task.io.sort.factor,将merge值增大

    3)在shuffle阶段不影响业务逻辑情况下使用Combiner

  3.Reduce阶段

    1)设置合理的map与reduce个数

    //map可以通过文件切块的大小,或小文件合并改变maptask数量

    //reduce通过分区partitioner,setNumReduceTasks改变reducetask数量

    2)设置map/reduce共存

   //即map允许到一定程度后,启动reduce减少reduce的等待时间

   //mapreduce.job.reduce.slowstart.completedfmaps(参数越小reduce等待时间越少)

   //合理设置reduce端的buffer:mapreduce.reduce.markreset.buffer.percent

  4.数据传输

    1)数据压缩

    2)使用SequenceFile,它是二进制文件,使字节之间紧密度更高,提高效率。

  5.数据倾斜

    1)进行范围分区

    2)自定义分区

    3)Combiner

    4)能用map join坚决不用reduce join

  6.参数调优

    1)CPU

    //程序map阶段默认使用cpu核心数量:mapreduce.map.cpu.vcores

     //程序reduce阶段more使用cpu核心数量:mapreduce.reduce.cpu.vcores

    2)内存

    //一个maptask可以使用的最大内存:mapreduce.map.memory.mb

    //一个reducetask可以使用的最大内存:mapredcue.reduce.memory.mb

    3)并行度

    //reduce去map端拿数据时的并行度:mapreduce.reduce.shuffle.parallelcopies

posted @ 2019-04-08 10:49  给你一个公主抱  阅读(566)  评论(0编辑  收藏  举报