Hadoop中的心跳机制

心跳是ResourceManagerNodeManager的桥梁,它实际上是一个RPC函数,NodeManager周期性的调用该函数汇报节点和任务状态信息,从而形成心跳。在hadoop中,心跳主要有三个作用: 
1、判断NodeManager是否活着 
2、及时让ResourceManager获取各个节点上的资源使用情况和任务运行状态 
3、为NodeManager分配任务 

注:ResourceManager不会主动向NodeManager发送任何信息,而是由NodeManager主动通过心跳领取属于自己的信息,ResourceManager只能通过心跳应答的形式为各个NodeManager分配任务

调整心跳间隔 
NodeManagerr心跳时间间隔大小应该适度,如果太小,则ResourceManager需要处理高并发的心跳连接请求,必然产生不小的并发压力,如果太大,空闲的资源不能及时汇报给ResourceManager(进而NodeManagerr分配任务),造成资源浪费,进而降低了系统的吞吐率。NodeManagerr汇报心跳的时间间隔并不是一成不变的,它会随着集群的规模的动态调整而变化,以便能够合理利用ResourceManager的并发处理能力,在hadoop mapreduce中,只有ResourceManager知道某一时刻集群的规模,因此由ResourceManager为每个NodeManagerr计算下一次汇报心跳的时间间隔,并通过心跳机制告诉NodeManagerr 
ResourceManager允许用户通过参数配置心跳的时间间隔加速比,即每增加mapred.heartbeats.in.second(默认是100,最小1)个节点心跳时间间隔增加mapreduce.jobtracker.heartbeats.scaling.factor(默认是1,最小是0.01)秒。同时为了防止用户参数设置不合理而对ResourceManager产生较大的负载,ResourceManager要求心跳时间间隔至少为3

实现:

public int getNextHeartbeatInterval() {

 // 获取当前Tasktracker的总数, 

int clusterSize = getClusterStatus().getTaskTrackers();

//计算新的心跳间隔 

int heartbeatInterval = Math.max((int)(1000 * HEARTBEATS_SCALING_FACTOR*((double)clusterSize/NUM_HEARTBEATS_IN_SECOND)), HEARTBEAT_INTERVAL_MIN) ;

return heartbeatInterval; }

猜你喜欢

转载自blog.csdn.net/LinLin_Hou/article/details/79441792