spark源码分析--Master和worker建立连接

原创,转载请注明出处 http://baishuo491.iteye.com/blog/1990242。作者邮箱 vc_java@hotmail.com 
Spark的master启动后,等待work通过spark://master'ip:7077的url去连接Master.   
在worker的回调函数preStart(Worker.scala)里面,调用了函数connectToMaster,这个函数完成了向Master节点注册work的工作。执行的方法是向master发送一个RegisterWorker消息 
Java代码   收藏代码
  1. master ! RegisterWorker(workerId, host, port, cores, memory, webUi.boundPort.get, publicAddress)  

再来看Master.scala 
在这个类的recieve函数里,我们可以看到当Master收到RegisterWorker消息后如何处理 
Java代码   收藏代码
  1. case RegisterWorker(id, host, workerPort, cores, memory, worker_webUiPort, publicAddress) => {  
  2.       ........  
  3.       if (idToWorker.contains(id)) {  
  4.         sender ! RegisterWorkerFailed("Duplicate worker ID")  
  5.       } else {//如果idToWorker里面没有,成功注册  
  6.         addWorker(id, host, workerPort, cores, memory, worker_webUiPort, publicAddress)  
  7.         ........  
  8.         sender ! RegisteredWorker("http://" + masterPublicAddress + ":" + webUi.boundPort.get)  
  9.         schedule()  
  10.       }  
  11.     }  

如果idToWorker这个hashmap里面,已经存在了相同的id,给发出请求的worker,发送RegisterWorkerFailed消息。如果不存在相同的id,执行addWorker操作后,向发出消息的worker,发送RegisteredWorker消息。之后调用schedule函数,进行job的重新分配 
再回到Worker.scala,看worker收到RegisteredWorker消息后的动作 
Java代码   收藏代码
  1. case RegisteredWorker(url) =>  
  2. .......  
  3. context.system.scheduler.schedule(0 millis, HEARTBEAT_MILLIS millis) {  
  4.   master ! Heartbeat(workerId)  
  5. }  

很简单,就以HEARTBEAT_MILLIS (默认是15秒(15000毫秒) --System.getProperty("spark.worker.timeout", "60").toLong * 1000 / 4)为时间间隔,定期向master发送心跳, 
而master 每隔WORKER_TIMEOUT(默认60秒(60000毫秒) val WORKER_TIMEOUT = System.getProperty("spark.worker.timeout", "60").toLong * 1000),检查一次超时。发送CheckForWorkerTimeOut消息给自己(也就是master),收到这个消息后,调用timeOutDeadWorkers清理超过WORKER_TIMEOUT时间间隔,仍未收到心跳的worker

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值