摘要:
接着上期内核源码(六)的最后,DAGSchedule会将每个Job划分一系列stage,然后为每个stage创建一批task(数量与partition数量相同),并计算其运行的最佳位置,最后针对这一批task创建一个TaskSet对象,调用submitTasks方法提交TaskSet到TaskSch 阅读全文
摘要:
引言 对于Spark开发人员来说,了解stage的划分算法可以让你知道自己编写的spark application被划分为几个job,每个job被划分为几个stage,每个stage包括了你的哪些代码,只有知道了这些之后,碰到某个stage执行特别慢或者报错,你才能快速定位到对应的代码,对其进行性能 阅读全文
摘要:
引言 对于很多程序员来说,写递归程序是比较头疼的一件事,即使是把程序看懂了,轮到自己写的时候也是一脸懵逼,那么到底写递归有没有方法论呢?当然!本文就将从数学归纳法的角度教你如何写递归程序。 数学归纳法与递归的关系 有人会疑惑,不是说好写递归嘛,怎么扯到数学归纳法了?别急慢慢往下看你就知道了。 首先我 阅读全文
摘要:
引言 我们知道在application中每存在一个action操作就会触发一个job,那么spark底层是怎样触发job的呢?接下来我们用一个wordcount程序来剖析一下job的触发机制。 解析wordcount源码 new PairRDDFunctions(rdd) 在上面我们也可以看到red 阅读全文
摘要:
题目描述一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。 题目描述 一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。 思路首先想到的解决方案是根据普通跳台阶题目改编,因为可以跳 阅读全文
摘要:
上篇文章我们剖析了Master的原理和源码,知道了当Master使用资源分配算法将资源分配完成后,就会给对应的Worker发送启动Driver或者Executor的消息,那么Worker收到这些消息后,具体是怎么启动Driver或者Executor的呢?这篇文章就让我们深入剖析一下Worker的原理 阅读全文
摘要:
一. 状态改变机制源码分析 在剖析Master核心的资源调度算法之前,让我们先来看看Master的状态改变机制。 Driver状态改变 可以看出,一旦Driver状态发生改变,基本没有好事情,后果要么是删除Driver,要么是报异常! removeDriver方法: 可以看出,一旦Driver状态发 阅读全文
摘要:
一. 主备切换机制 概要 Spark Master主备切换可以基于两种机制,一种是基于文件系统的,一种是基于Zookeeper的,基于文件系统的主备切换机制,需要在Active Master挂掉之后,由我们手动去切换到Standby Master上;而基于Zookeeper的主备切换机制,可以实现自 阅读全文