您的位置:首页 > 其它

spark2.2.0源码学习过程记录:Day6

2017-09-02 16:08 316 查看
1、读《apache spark 源码剖析》第四章第2节2.4任务执行、2.5节Checkpoint和Cache、2.6节WebUI和Metrics
由于后面两个小节我目前并不关心,所以暂时只读一下就好

2、源码学习

类Executor
顺序读这个类,很快看到launchTask方法,这个方法创建一个TaskRunner,然后放到runningTasks队列中,然后使用threadPool启动这个TaskRunner

小细节:
这个类有一个HEARTBEAT_MAX_FAILURES参数,默认60,也就是在这个executor向driver发送心跳失败超过60次后,会把自己kill掉

类TaskRunner
简单看一下类的源码,然后看run方法
首先创建一个TaskMemoryManager(方法中传入一个MemoryManager雷),看源码的类头部注释信息和类名可以大致推测是管理内存的,MemoryManager的注释写的更清晰:An abstract memory manager that enforces how memory is shared between execution and storage(storage指缓存数据和网络传输所用的内存,其他shuffles,
joins,sorts and aggregations都算是execution内存)
调用execBackend.statusUpdate来向driver更新运行信息(这个execBackend的实现类应该是CoarseGrainedExecutorBackend)
调用updateDependencies方法把相关依赖的jar包拷贝到本地的tmp文件夹中
反序列化得到task
调用task.run实际运行任务,运行完后释放资源
将task运行结果序列化,封装成DirectTaskResult,再序列化
如果结果大于最大结果阈值,丢弃;大于直接结果阈值(默认1m),使用BlockManager发送;其他情况直接发送
调用execBackend.statusUpdate告诉driver最新状态
最后从runningTasks中去掉这个task

小细节
@GuardedBy 注解,网上摘录的信息:
域注解和方法注解都是用@GuardedBy( lock )来标识。里面的Lock是告诉维护者:这个状态变量,这个方法被哪个锁保护着。这样可以强烈的提示类的维护者注意这里。
@GuardedBy( lock )有以下几种使用形式:
1、@GuardedBy( "this" ) 受对象内部锁保护
2、@GuardedBy( "fieldName" ) 受 与fieldName引用相关联的锁 保护。
3、@GuardedBy( "ClassName.fieldName" ) 受 一个类的静态field的锁 保存。
4、@GuardedBy( "methodName()" ) 锁对象是 methodName() 方法的返值,受这个锁保护。
5、@GuardedBy( "ClassName.class" ) 受 ClassName类的直接锁对象保护。而不是这个类的某个实例的锁对象。

类Task
之前的代码调用了task.run,先把这个类浏览一下
调用runTask(分别是ShuffleMapTask和ResultTask)
ShuffleMapTask将运算结果直接用ShuffleWriter写到shuffle system中,ResultTask将结果返回给driver
在两个task实现类的这个方法中看到最终运行的都是根据taskBinary取得的,回去以前的代码看,这个taskBinary是在DAGScheduler的submitMissingTasks方法中创建的

类CoarseGrainedSchedulerBackend
接收到statusUpdate的信息,调用scheduler的statusUpdate(我这里是TaskSchedulerImpl)
在这个方法中判断如果task运行成功,调用taskResultGetter.enqueueSuccessfulTask
最后调用scheduler.handleSuccessfulTask,其中调用taskSetManager.handleSuccessfulTask
这个方法中调用sched.dagScheduler.taskEnded,其中调用eventProcessLoop.post发送到了eventQueue中
然后DAGScheduler取得这条信息并执行handleTaskCompletion方法,这个方法中针对task的类型的不同做了不同的操作,这次不多看了:)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: