原创,转载请注明出处 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消息
master ! RegisterWorker(workerId, host, port, cores, memory, webUi.boundPort.get, publicAddress)
再来看Master.scala
在这个类的recieve函数里,我们可以看到当Master收到RegisterWorker消息后如何处理
case RegisterWorker(id, host, workerPort, cores, memory, worker_webUiPort, publicAddress) => {
........
if (idToWorker.contains(id)) {
sender ! RegisterWorkerFailed("Duplicate worker ID")
} else {//如果idToWorker里面没有,成功注册
addWorker(id, host, workerPort, cores, memory, worker_webUiPort, publicAddress)
........
sender ! RegisteredWorker("http://" + masterPublicAddress + ":" + webUi.boundPort.get)
schedule()
}
}
如果idToWorker这个hashmap里面,已经存在了相同的id,给发出请求的worker,发送RegisterWorkerFailed消息。如果不存在相同的id,执行addWorker操作后,向发出消息的worker,发送RegisteredWorker消息。之后调用schedule函数,进行job的重新分配
再回到Worker.scala,看worker收到RegisteredWorker消息后的动作
case RegisteredWorker(url) =>
.......
context.system.scheduler.schedule(0 millis, HEARTBEAT_MILLIS millis) {
master ! Heartbeat(workerId)
}
很简单,就以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
- 大小: 55.9 KB
分享到:
相关推荐
《Spark源码分析3——驱动器、主节点与执行器之间的连接》 在Spark的分布式计算框架中,驱动器(Driver)、主节点(Master)和执行器(Executor)是核心组件,它们之间的通信和协作构成了Spark作业执行的基础。本文将深入...
- **Master与Worker启动**: 首先关注的是Spark集群中Master节点和Worker节点如何启动并建立通信连接的过程。 - **WordCount示例分析**: 通过分析WordCount这一典型示例,理解Spark内部的工作机制。 ### Spark启动...
总结,Spark源码的学习是一个深入理解大数据处理流程和技术细节的过程。通过源码,我们可以了解到Spark如何高效地调度任务,如何处理大规模数据,以及如何实现高可用和容错。这对于大数据开发者来说,既是提升技能的...
《深入理解Spark核心思想与源码分析》这本书深入剖析了Apache Spark这一大数据处理框架的核心设计理念与实现机制。Spark作为分布式计算的重要工具,以其高效的内存计算、易用的API和广泛的应用场景深受业界青睐。...
### Spark Core 源码分析之部署方式 #### 前言 Apache Spark 是一个用于大规模数据处理的开源计算系统,其核心模块 Spark Core 提供了基础的并行计算框架和分布式部署方式的支持。本文主要关注 Spark 的部署方式,...
《深入理解Spark核心思想与源码分析》是耿嘉安撰写的一本专著,全面而深入地探讨了Apache Spark这一大数据处理框架的核心理念和技术细节。这本书不仅覆盖了Spark的基础概念,还深入到了源码层面,为读者揭示了Spark...
### Spark源码解析要点 #### 一、Spark概述与特性 **Spark** 是一款由加州大学伯克利分校AMP实验室研发的数据处理框架,它极大简化了大数据应用的开发流程,支持多种编程语言如Java、Scala、Python和R,使得开发者...
### Spark源码解析:Master与Worker机制 #### Spark概述及特点 Spark是一个高效的数据处理框架,它由加州大学伯克利分校的AMP实验室研发。该框架支持多种编程语言(包括Java、Scala、Python和R等),使开发者可以...
为了深入了解 Spark 的内部机制,我们需要对其内核源码进行深入分析。 Application/App 在 Spark 中,Application 指的是用户编写的 Spark 应用程序/代码,包含了 Driver 功能代码和分布在集群中多个节点上运行的 ...
2. **大数据处理**: BigDataView-master可能集成了大数据处理框架,如Hadoop或Spark,用于预处理和分析大量数据。理解如何从大数据源中提取信息,并进行清洗、聚合等操作是使用模板的前提。 3. **可视化库**: 模板...
- 启动 Spark Master 和 Worker 节点。 - 验证集群状态。 **示例: 计算 Pi** 在 CentOS 上使用 Spark 进行 Pi 的计算是一个经典的入门示例。可以通过编写简单的程序来实现,该程序使用 Monte Carlo 方法估计 Pi ...
Spark源码分析 各个组件介绍 后面补充。。。。 StandAlone模式 在StandAlone模式的start-all的shell启动脚本下,在当前机器执行了JAVA_HOME/bin/java -cp ….Master和在配置的slave的机器中执行 JAVA_HOME/bin/java ...
Spark 启动过程中主要是进行 Master 和 Worker 之间的通信,其消息发送关系如下,首先由 worker 节点向 Master 发送注册消息,然后 Master 处理完毕后,返回注册成功或失败的消息。 # 作业执行源码分析 当我们的...
分析源码理解如何实现数据的排序和写入过程,包括如何优化排序算法、减少磁盘I/O等。 ##### 4. TungstenSortedBasedShuffle **4.1 概述** TungstenSortedBasedShuffle是在Tungsten项目基础上实现的优化版...
Spark 初始化源码阅读 Spark on YARN 的 Client 和 Cluster 区别 Spark 是一个大数据处理的开源框架,它可以在多种集群管理器上运行,如 YARN、Mesos 和 Standalone。Spark on YARN 是 Spark 在 YARN 集群管理器上...
Spark 0.6.0源码分析 Spark是Apache软件基金会下的一个开源大数据处理框架,以其高效的内存计算和弹性分布式数据集(Resilient Distributed Datasets, RDDs)为核心特性,广泛应用于数据处理、机器学习和图形计算等...
理解Spark的内核原理和源码分析对于开发者来说至关重要,有助于优化应用性能,定位并解决问题。通过深入学习Spark的Master、Worker、Driver和Executor的工作方式,以及不同集群部署模式,可以更好地理解和利用Spark...
- 在Standalone模式下,Spark通过Master和Worker节点来管理计算资源和任务调度。 - Standalone模式支持高可用性部署方案,以及通过单点恢复实现故障转移。 4. Spark RDD: - RDD是分布式内存的一个抽象概念,它...