Task原理:
1.Executor接收到了LaunchTask请求,将task封装成TaskRunner运行。
2.反序列化task,并通过网络拉取需要的文件、jar包等,然后运行task的run()方法。
3.调用RDD的iterator()方法,会针对task所对应的RDD的partition,执行我们自定义的function函数(算子)。
4.ShuffleMapTask阶段,计算完partition数据后,会使用shuffleManager的shuffleWrite,将数据分区之后写入对应的分区文件。
5.操作完成后,会有一个MapStatus发送给DAGScheduler中的MapOutPutTracker。
6.ResultTask阶段,会去MapOutPutTracker中拉取ShuffleMapTask输出的RDD数据,来执行shuffle等操作,包括自定义的算子和函数。