
spark原理与源码(基于spark2.4.0)
tianlan996
这个作者很懒,什么都没留下…
展开
-
十六、Checkpoint剖析
checkpoint,首先要调用SparkContext的setCheckpointDir()方法,设置一个容错的文件系统的目录,比如说HDFS;然后,对RDD调用调用checkpoint()方法。之后,在RDD所处的job运行结束之后,会启动一个单独的job,来将checkpoint过的RDD的数据写入之前设置的文件系统,进行高可用、容错的类持久化操作。那么此时,即使在后面使用RDD时,它的...原创 2019-02-23 21:29:53 · 1115 阅读 · 3 评论 -
十一、TaskScheduler源码分析
一 DAGScheduler中提交taskDAGScheduler中,submitMissingTasks方法调用TaskScheduler的submitTasks方法。TaskScheduler是一个trait,其实现类是TaskSchedulerImpl。 override def submitTasks(taskSet: TaskSet) { val tasks = ...原创 2019-02-13 11:04:01 · 206 阅读 · 0 评论 -
十三、shuffle原理与源码剖析
1. 默认shuffle原理图上图中,有两个节点,第一个节点上运行了4个ShuffleMapTask,第二个节点上运行了4个ResultTask。ResultTask要去拉取ShuffleMapTask的输出数据,来完成比如reduceBykey等类型的shuffle操作。每个ShuffleMapTask都会为每个ResultTask创建一份bucket缓存,以及对应的ShuffleB...原创 2019-02-16 22:48:03 · 577 阅读 · 0 评论 -
十二、Task原理与源码
内容上接第八篇。原理图:代码分析:1. Executor/TaskRunner override def run(): Unit = { threadId = Thread.currentThread.getId Thread.currentThread.setName(threadName) val threadMXBean = M...原创 2019-02-15 22:27:55 · 355 阅读 · 0 评论 -
十五、rdd从缓存读取数据
1. storageLevel不为none,说明之前持久化过数据,则尝试优先读取缓存数据,读不到的话,再重新计算。 /** * Internal method to this RDD; will read from cache if applicable, or otherwise compute it. * This should ''not'' be called by u...原创 2019-02-21 15:02:32 · 324 阅读 · 0 评论 -
九、job触发流程
1. val lines = sc.textFile()可以从HDFS、本地文件系统、或者任何Hadoop支持的文件系统中读取文件。返回的是一个字符串的RDD。 /** * Read a text file from HDFS, a local file system (available on all nodes), or any * Hadoop-supported f...原创 2019-01-27 22:14:15 · 408 阅读 · 0 评论 -
十、DAGScheduler内幕
一 runJob上节介绍到调用DAGScheduler的runJob,DAGScheduler runJob调用submitJob提交job。 /** * Run an action job on the given RDD and pass all the results to the resultHandler function as * they arrive. ...原创 2019-02-01 16:30:50 · 294 阅读 · 0 评论 -
八、worker原理剖析
一 worker启动driver1 master向worker发送启动driver消息 worker.endpoint.send(LaunchDriver(driver.id, driver.desc)),见第七节。2 worker收到消息后,进入LaunchDriver流程。3 创建DriverRunner实例并调用其start方法。4 DriverRunner start方法中...原创 2019-01-21 17:19:30 · 480 阅读 · 0 评论 -
七、资源调度schedule
schedule,作用是:在Application中间调度当前可用的资源。每当新的Application加入或可用的资源改变时,调度方法就会被调用。为什么资源改变时要调度?因为之前可能某些Application由于缺乏资源处于waitting状态,当资源改变时,就可以重新尝试调用这些Application。调度前,会打乱Worker(状态为Alive)的顺序,然后用轮询的方式依次在满足条件的w...原创 2019-01-20 17:03:26 · 628 阅读 · 0 评论 -
六、Driver & Executor状态改变机制
一 Driver状态改变1. 需要移除状态:DriverState.ERROR | DriverState.FINISHED | DriverState.KILLED | DriverState.FAILED2. 移除 2.1 找到了对应id的driver 2.2 移除缓存中的driver 2.3 放入完成缓存 2.4 从持久化引擎中移除 2.5 设置为改变到的最终的状态...原创 2019-01-19 10:37:37 · 539 阅读 · 0 评论 -
五、注册机制
一 Worker注册1. Worker启动之后,主动向Master进行注册。2. Master在receive方法中接收Worker的注册消息。3. 判断Master是否为Standby节点,如果是,则返回消息 MasterInStandby,结束。否则,继续执行下面的流程。4. 根据Worker的id判断Worker是否已经注册过,注册过的话,返回注册失败:"Duplicate ...原创 2019-01-18 18:38:12 · 596 阅读 · 0 评论 -
四、Spark Master主备切换
Master可以配置为两个,Spark在standalone模式下,支持Master主备切换。当Active Master节点出现故障的时候,可以将Standby Master切换为Active Master。Master主备切换相关代码流程如下:1 设置RECOVERY_MODE,没有配置的话 默认值为 NONEprivate val RECOVERY_MODE = conf...原创 2019-01-18 11:20:42 · 778 阅读 · 0 评论 -
三、SparkContext详解
一 架构图上图以standalone模式为例。 SparkContext创建TaskScheduler,DAGScheduler,SparkUI。 TaskSchedulerImpl就是我们所说的TaskScheduler,底层主要基于StandaloneSchedulerBackend来工作。 StandaloneSchedulerBackend在底层接收TaskScheduler...原创 2019-01-17 22:31:21 · 461 阅读 · 0 评论 -
二、基于yarn的两种提交模式
一 yarn-cluster模式1. 发送请求到ResourceManager,请求启动ApplicationMaster。2. 在某个NodeManager上启动ApplicationMaster。3. ApplicationMaster向ResourceManager申请container,启动executor。4. 分配一批container,用于启动executor。...原创 2019-01-17 17:56:10 · 291 阅读 · 0 评论 -
一、spark core关键流程总览
图中集群基于standalone模式1. TaskScheduler通过它对应的一个后台进程去连接Master,向Master注册Application。2. Excutor启动之后,会反向注册到TaskScheduler上去。3. TaskScheduler会把每一个task提交到Excutor上去执行。(task分配算法有 FIFO/FAIR两种) SparkConte...原创 2019-01-17 16:09:00 · 283 阅读 · 0 评论 -
十四、BlockManager原理解析
1 原理图Driver上,有BlockManagerMaster,它负责对各个节点上的BlockManager内部管理的数据的元数据进行维护,比如block的增删改等操作,都会在这里维护元数据等变更。每个节点上都有BlockManager。BlockManager有几个关键的组件:DiskStore:负责对磁盘上的数据进行读写。MemoryStore:负责对内存中的数据进行读写。...原创 2019-02-20 11:18:44 · 421 阅读 · 0 评论