没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
Spark 源码阅读笔记
目录
源码阅读笔记
源码之 与
节点的启动过程分析
节点启动和注册
进程的启动
节点主要流程
节点主要流程
节点主要流程
启动流程图
境变量
!!
!! 分区列表。
!! 的依赖列表
窄依赖
宽依赖
!! 的分区计算函数 "
分区器
位置偏好
全排序
水塘采样
获取分区边界
# 的划分和提交
$% 的提交
# 的划分
# 的提交
"& 启动流程
"'(&) 的启动
"* 的注册
"资源调度
"& 的启动 "
的分发
(& 初始化
&%+#, "
&-. "
, 的调度 "
任务本地性 "
的分发 "
的运行
多线程模型
+ & 的多进程模型和 的多线程模型
, 的执行(一) "
(&/
(&/+,0(/1
2((&/+# 运行原理
(&/+# 运行原理
的执行(二) "
(&/+,0(/
345 网络传输服务
"(&/ 相关参数调优
&,
存储模块
)+# 初始化
持久化策略 "
数据持久化到内存中
数据持久化到磁盘中
数据块的获取
1 spark 源码阅读笔记
spark 是由伯克利 AMP 实验室开发出来的一个非常优秀的数据处理计算框
架,利用这个框架我们可以非常容易的开发并行程序,然后在集群上运行,
spark 社区为我们提供了 Java,Scala,python,R 语言等很多接口,每个程
序员可以选择自己熟悉的语言进行开发。
spark 在实现过程中,利用了很多现成的技术和思想,例如通信框架选用
的是 akka 和 netty,这两种通信技术方案已经在工业界盛行多年,有很多成功
的案例可以借鉴;spark she 的实现 sortshe 的实现其实是完全借鉴了
mapreduce she 实现的思路,只是实现细节不太一样;spark 在底层调度
的过程中也尽可能的复用了 yarn 和 mesos 这两种的资源调度机制。
可以这样认为 spark 其实是 hadoop 的加强版,他们同根同源利用的都是
mapreduce 这种先切分后聚合的思想,只是 hadoop 对于数据处理的思路单
一,加工方式过于生硬。spark 相比较 Mapreduce 有下面几个优化的地方。
DAG 编程模型。将数据加工链路整理成一个 DAG(有向无环图),这其
实在理论上给 hadoop 数据加工过程一个很好的总结,对于数据加工
链路比较长的 job,spark 会将其切分成多个 stage 对应了 Hadoop
的多个 Map 和 Reduce 逻辑,一个 stage 包含了多个并行执行的
tasks。stage 之间通过 she 传递数据,通过依赖相互串联起来。这
样的话整个 job 过程只需要在 Hdfs 读写一次,不需要像 mapreduce
那样在 hdfs 中间写入多次,大大提高了速度。
申请资源方式不同。spark 上 Excutor 对应一个 Jvm 资源,多个 task
对应 Jvm 上的多个线程,Excutor 可以被多个 task 所复用,申请资源
次数比较少。Mapreduce 每一个 task 任务会对应一个进程,且相互
之间不能复用,申请资源次数比较多。
RDD 缓存机制。spark 对于中间运算的结果可以缓存在内存,下次再
取数据时就不必重新计算,这非常适用于一些迭代式的任务的运行,
可以大大提高速度。
容错机制。spark 在 DAG 的基础上建立了每个 RDD 的血统依赖和检
查点机制。当数据加工过程中的某个 task 中间执行失败后,可以根据
其依赖关系以最小代价重启 task,而不必像 Mapreduce 那样从头开
始运行 task。
本次源码阅读用的是 spark 1.2 版本,部署版本为 standalone 模式,另
外说明一下 standalone 的意思独立模式,自带完整的服务,可单独部署到一
个集群中,无需依赖任何其他资源管理系统,这也是 spark yarn 版本和
mesos 版本的基础。
spark 后续版本可能在某些细节上有所优化,增加了一些库文件,但基本
思想并未改变,所以下文引入的源码基本上都是 spark 1.2 的源码。
剩余63页未读,继续阅读
资源评论
mylife512
- 粉丝: 1461
- 资源: 1万+
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功