Spark源码阅读02-Spark核心原理之容错及HA(高可用

本文详细描述了SparkMaster/Slave架构中,Worker如何通过心跳机制保持与Master的连接,以及在Worker超时情况下Master如何处理的容错流程。
摘要由CSDN通过智能技术生成

以独立运行模式来讨论Worker异常。Spark的 独立运行模式采用的是Master/Slave的结构,其中Slave是由Worker来担任的其在运行的时候会发送心跳给Master,让 Master 知道Worker 的实时状态。另一方面Master也会检测注册的Worker是否连接超时,因为在集群运行过程中,可能由于机器宕机或者进程被杀死等原因造成Worker进程异常退出。Worker异常容错过程图如下:

在这里插入图片描述

(1)Master接收Worker的心疼来监测其实时状态,同时,Master中的onStart方法中也有检测Worker超时的线程。实现代码如下:

case Heartbeat(workerId, worker) =>

idToWorker.get(workerId) match {

case Some(workerInfo) =>

workerInfo.lastHeartbeat = System.currentTimeMillis()

case None =>

if (workers.map(_.id).contains(workerId)) {

logWarning(s"Got heartbeat from unregistered worker $workerId." +

" Asking it to re-register.")

worker.send(ReconnectWorker(masterUrl))

} else {

logWarning(s"Got heartbeat from unregistered worker $workerId." +

" This worker was never registered, so ignoring the heartbeat.")

}

}

override def onStart(): Unit = {

checkForWorkerTimeOutTask = forwardMessageThread.scheduleAtFixedRate(new Runnable {

override def run(): Unit = Utils.tryLogNonFatalError {

self.send(CheckForWorkerTimeOut)

}

}, 0, WORKER_TIMEOUT_MS, TimeUnit.MILLISECONDS)

}

(2)当Worker出现超时时,Master调用timeOutDeadWorkers方法进行处理。代码实现如下:

/** Check for, and remove, any timed-out workers */

private def timeOutDeadWorkers() {

// Copy the workers into an array so we don’t modify the hashset while iterating through it

val currentTime = System.currentTimeMillis()

val toRemove = workers.filter(_.lastHeartbeat < currentTime - WORKER_TIMEOUT_MS).toArray

for (worker <- toRemove) {

if (worker.state != WorkerState.DEAD) {

logWarning(“Removing %s because we got no heartbeat in %d seconds”.format(

worker.id, WORKER_TIMEOUT_MS / 1000))

removeWorker(worker, s"Not receiving heartbeat for ${WORKER_TIMEOUT_MS / 1000} seconds")

} else {

if (worker.lastHeartbeat < currentTime - ((REAPER_ITERATIONS + 1) * WORKER_TIMEOUT_MS)) {

小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数初中级Java工程师,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年最新Java开发全套学习资料》送给大家,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
img
img
img

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频

如果你觉得这些内容对你有帮助,可以添加下面V无偿领取!(备注Java)
img

,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频**

如果你觉得这些内容对你有帮助,可以添加下面V无偿领取!(备注Java)
[外链图片转存中…(img-CwSjvkHU-1710839621156)]

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值