Hadoop调优策略

一、调优策略

  1.调节溢写缓冲区大小,减少Spill溢写次数,减少磁盘I/O次数

  2.加入Combiner中间过程,在溢写缓冲区就会发生Combiner,好处是:比如——hello 1 hello 1一共占14个字节,Combiner 后,变为hello 2 。所以也能够间接减少Spill溢写次数,从而提高性能。

  3.加入Combiner中间过程,在Merger过程中,可能会发生Combiner,意义是能够减少最后结果的大小,从而能够减少Reduce Fetch的数据量,节省带宽,提供性能。注:为什么有可能不发生Combiner,如果最后的Spill文件数量是一个,则Spill文件相当于是最后的结果文件——即没有Merge过程——也就没有Combiner过程。此外,当Spill文件是2个时候,也不会发生Combiner。综上:在Merger过程,如果Spill文件的数量小于3,则不会发生Combiner。

  4.在Reduce 抓取分区数据时,是由线程来处理的,为了提高效率,我们的策略是让抓取线程尽可能等于或接近于Map任务数量,从而达到并行抓取的效果。

  5.适当调大Merge合并因子(Hadoop默认是10)

  6.Reduce任务并不是等所有的Map任务都完成后才启动的,Hadoop有一个默认的启动阈值,5%(0.05)。所以这个值可以适当减小。

二、Hadoop常见参数控制+调优策略

hadoop map数量优化 hadoop 调优_调优


hadoop map数量优化 hadoop 调优_Hadoop_02


hadoop map数量优化 hadoop 调优_Hadoop_03


hadoop map数量优化 hadoop 调优_Hadoop_04


三、MR调优策略

  Map Task和Reduce Task调优的一个原则就是

   1.减少数据的传输量(节省带宽)

   2.尽量使用内存

   3.减少磁盘I/O的次数

   4.增大任务并行数

   5.除此之外还有根据自己集群及网络的实际情况来调优。

四、硬件角度调优

  Hadoop自身架构的基本特点决定了其硬件配置的选项。Hadoop采用了Master/Slave架构,其中,master维护了全局元数据信息,重要性远远大于slave。在较低Hadoop版本中,master存在单点故障问题,因此,master的配置应远远好于各个slave。

五、操作系统参数调优

  1.增大同时打开的文件描述符和网络连接上限

使用ulimit命令将允许同时打开的文件描述符数目上限增大至一个合适的值。同时调整内核参数net.core.somaxconn网络连接数目至一个足够大的值。

  补充:net.core.somaxconn的作用

  net.core.somaxconn是Linux中的一个kernel参数,表示socket监听(listen)的backlog上限。什么是backlog呢?backlog就是socket的监听队列,当一个请求(request)尚未被处理或建立时,它会进入backlog。而socket server可以一次性处理backlog中的所有请求,处理后的请求不再位于监听队列中。当server处理请求较慢,以至于监听队列被填满后,新来的请求会被拒绝。在Hadoop 1.0中,参数ipc.server.listen.queue.size控制了服务端socket的监听队列长度,即backlog长度,默认值是128。而Linux的参数net.core.somaxconn默认值同样为128。当服务端繁忙时,如NameNode或JobTracker,128是远远不够的。这样就需要增大backlog,例如我们的3000

台集群就将ipc.server.listen.queue.size设成了32768,为了使得整个参数达到预期效果,同样需要将kernel参数net.core.somaxconn设成一个大于等于32768的值。

  2.关闭swap分区

避免使用swap分区,提供程序的执行效率。除此之外,设置合理的预读取缓冲区的大小、文件系统选择与配置及I/O调度器选择等