hadoop性能调优:通过调整心跳间隔增加Hadoop小集群吞吐率 | 张恒镭的博客

hadoop性能调优:通过调整心跳间隔增加Hadoop小集群吞吐率

时间:13-12-20 栏目:MapReduce 作者: 评论:0 点击: 2,897 次

据测试,对于小于300个节点的Hadoop集群,通过减小MapReduce心跳间隔的方法,可将系统性能提高大约0~15%。

MapReduce心跳大小应该适度,如果太小,JobTracker需要处理高并发的Heartbeat,势必造成不小的压力;如果太大,空闲的资源不能及时通知JobTracker(进而为之分配新的task),造成资源空闲,进而降低系统吞吐率。

如果将heartbeat 时间间隔设置为3s,对于一个300个节点的集群,JobTracker每秒处理100个heartbeat,而对于一个10个节点的集群,JobTracker只需要处理3.3个heartbeat,显然,对于小集群,3s的heartbeat间隔太大了。

在Hadoop 1.0.0版本或者之前版本,MapReduce心跳间隔计算方法(见JobTracker.java)是:


public int getNextHeartbeatInterval() {
  // get the no of task trackers
  int clusterSize = getClusterStatus().getTaskTrackers();
  int heartbeatInterval = Math.max(
          (int)(1000 * HEARTBEATS_SCALING_FACTOR *
          Math.ceil((double)clusterSize /
         NUM_HEARTBEATS_IN_SECOND)),
        HEARTBEAT_INTERVAL_MIN) ;
   return heartbeatInterval;
}

其中,HEARTBEATS_SCALING_FACTOR默认为1.0, NUM_HEARTBEATS_IN_SECOND默认是100,这两个参数均可以配置,HEARTBEAT_INTERVAL_MIN是一个常数,大小为3000,也就是3s。

则当集群规模小于300时,heartbeatInterval始终是3000s,只有大于300时,heartbeatInterval才开始增大。

JIRA上有个patch(请猛击该链接:MAPREDUCE-1906)对该问题进行了优化,将HEARTBEAT_INTERVAL_MIN设为可配置的,默认值是300(ms),显然默认值优先照顾了小集群用户(实际上真正大于300个节点的公司还是少数,在中国,绝大多数公司的Hadoop集群节点数小于300),改进前后JobTracker每秒处理的Heartbeat数目如下:

对于小集群,心跳减小了,吞吐率必然会增加。

注意,本文讨论的Hadoop MapReduce中心跳时间间隔,而不是HDFS中心跳间隔,HDFS中的心跳间隔默认为3s,且可以配置。

声明: 本文由( )原创编译,转载请保留链接: hadoop性能调优:通过调整心跳间隔增加Hadoop小集群吞吐率

hadoop性能调优:通过调整心跳间隔增加Hadoop小集群吞吐率:等您坐沙发呢!

发表评论




------====== 本站公告 ======------
欢迎关注我的博客。

其他