mzl9039

已无岁月可回头

spark 源码编译中碰到的一个问题

-source 1.6 中不支持 diamond 运算符

编译 spark 源码 学习 spark 源码有段时间了,从一开始完全不懂 scala,靠抄 spark 源码学习,到近段时间 开始分析 spark 源码,一直没有成功编译过 spark 源码。 我下载的spark 源码, artifactId 是 spark-parent_2.11, version: 2.1.3-SNAPSHOT. 本地 jdk 为 1.7, maven 为 3.5...

Spark driver 启动流程分析

driver 启动, app 注册以及 executor 的启动过程

Spark driver 启动流程分析 我们知道,提交 Spark app 的时候会需要先创建初始化 sc,然后 spark 会启动一个 driver 端,这个 driver 端用来 执行我们日常开发的 app 的 main 方法,并创建 sc(听起来就像是本地代码部分,事实上有细微区别,因为 driver 端 可以不在本地,而在集群上,如 yarn 的 cluster 模式下, driv...

Spark Master-Worker启动流程

Spark Master/Worker启动流程 在分析提交 task 的流程中,被 executor 的启动流程搞混了,打算写几篇关于启动的文章,自然考虑从 Master 和 Worker 的启动写起。 在启动过程中,主要是消息的传递和通信,本身其实不复杂。 graph TD start-all(start-all)-->|1.调用脚本start-master.sh|st...

添加 mermaid

给 github.io 添加流程图支持

流程图 最近分析 spark 源码,感觉需要画流程图才能理清流程。但是,之前我的 github.io 不支持画流程,干脆趁机会添加一个好了。 由于 markdown 流程图规范不一致,所以 github.io 不支持流程图 plugin(貌似也不是不可能,我没试过),干脆靠 js 好了。 于是发现了 mermaid。 使用方法 使用方法很简单: 在本项目的 styles/js 目录下...

Spark 任务分发与执行流程

Spark 任务分发与执行流程 上一篇 blog 写了 spark 上提交任务的流程,但这些任务如何分发到集群中去执行呢?本文尝试分析一下任务的分发与执行的流程 由于流程比较复杂,我们在这里尝试先画个图来表示 初始化 TaskScheduler 和 SchedulerBackend graph TD sc(new SparkContext)-->create_sc...

Spark 提交任务流程

Spark 提交任务流程 看 spark 源码有段时间了,网上也看到别人对 spark 提交任务流程的分析,但总也记不住,干脆自己分析一下流程,免得以后忘记。 触发任务提交 spark rdd 算子分两类:transformation 和 action,其中 transformation 对 rdd 进行转换,action 触发最终的计算。这两类算法的区别,主要在于 action 类算...

2017 year-end summary

新的旅途

新的旅途 2017年回首 工作一年了, 今年的目标是:学会花钱。到年末时,基本上养成了不乱买东西的习惯, 也不再冲动购物,购买需要的东西变得比较挑剔。 年初计划还完所有借款,这个目标没有完成。主要是由于之前的助学贷款利率较低, 考虑将手头的资金进行一些简单的投资。另外,出借一部分也是没有还完借款的原因 之一。无论如何,今年要开始攒钱并学习投资的计划。 这一年的工作里,也发现了自己的一些不...

Spark BlockManager源码阅读

BlockManager 类

jdk BlockingQueue源码阅读

BlockingQueue 阻塞队列:能够阻塞当前试图从队列中获取元素的线程。而非阻塞队列则做不到,这是两者最大的区别。 最典型的应用场景是消费者-生产者模型。 阻塞队列概况 阻塞队列由 BlockingQueue 定义。jdk 1.8 中实现了该接口的主要有以下几个: ArrayBlockingQueue: 基于数组实现的阻塞队列,初始化时必须指定容量大小,可以指定公平锁或非公...

jdk BlockingQueue源码阅读

BlockingQueue BlockingQueue 是一个 Queue,添加了一些支持的操作: 获取元素时,若队列为空,则等待 存储元素时,若队列已满,则等待 BlockingQueue 支持 4 种形式的方法,通过不同的方式,来处理当前无法立刻满足但将来可以满足的队列操作: 抛出异常 返回特定值(如 null 或 false) 阻塞当前线程直到操作成功 ...