1. 整体结构
Spark Driver是一个独立的JVM进程, 启动后维护SparkContext结构, 管理整个任务的资源和执行过程.
它通过维护DAGScheduler来维护RDD的执行图, 通过维护JobScheduler来分发DAG的执行逻辑到Executor那里. 启动后在4040端口提供一个可以访问的UI, 展示当前任务的执行状况.

2. 重要组件简要说明
2.1 DAGScheduler
将RDD的依赖关系生成一个有向无环图, 从而构建起程序执行的一步一步的逻辑. 在后边的章节中会有具体的介绍
2.2 TaskScheduler
将DAG中的一步一步的任务分配给具体的Executor来执行的驱动单元
2.3 MetadataCleaner
将非持久化的中间生成的各种结构回收掉, 比如中间过程中生成的各种RDD.
2.4 HeartbeartReceiver
接收Executor的心跳, 心跳中裹挟着任务进度和统计信息. 通过心跳来管理所有Executor的死活
2.5 ActorSystem
在1.6.0中是Akka实现的模型, 实现一个抽象的通信网络
2.6 Serializer
序列化工具, 是spark调优最重要的环节, 序列化是用计算资源换带宽,换内存的重要的过程. 默认采用Java.io.serializer, 但是kyro的性能会更高, bug也更多
2.7 BlockManager
Spark把所有用到的数据底层用Block来描述, 每个Block是一个默认64MB的单元.它可以在内存中, 在磁盘中, 在Tachyon中. Spark把每个Block的信息用一个叫BlockId的结构集中保存在Driver中, 并利用这个manager在每个Executor上进行管理
2.8 BroadcastManager
Executor需要用到的变量, 有两种, 一种是不可变的, 一种是可累加的.
2.9 NettyBlockTransferService
Netty是一个异步网络工具, 基于Event-Driver模型来异步的实现网络通信, 从而在不同的节点上发送和接受这些Block
2.10 HttpFileServer
启动Spark任务时有时会带上一些用户自己的Jar包等第三方数据包, 所以Driver索性搭建一个HTTP文件服务器供Executor下载到本地
2.11 MemoryManager
管理内存, 这里用到了一种叫unroll的机制允许进程提前申请内存空间, 国内很多书翻译成占座机制. 其实就是Linux内核里的malloc
网友评论