-
rdd变换:
textfile()加载文件:返回hadoopRDD(创建HadoopRDD之前,先将hadoopConfiguration进行广播)调用map方法,最终返回MapPartitionsRDD
详细流程:https://blog.csdn.net/weixin_43093501/article/details/89492421
-
rdd提交:
- sparkcontext运行作业
- 调用有向无环图调度器的运行作业方法
- 有向无环图提交作业到事件轮询对象中,将其封装成事件然后发送到轮询队列。
- 有一个线程监控队列,将事件最终发送到有向无环图进行处理。
- 具体内容为将stage递归提交,然后将task串行化广播到集群。
- 任务调度器将任务集提交到后台调度器。
- 后台调度器使用netty发送套接字到消息轮询对象中。
- 有一个线程监控,将数据发送到执行器中,执行器执行任务。
- 执行器中有线程池,创建线程运行task。
- 首先反序列化,然后运行,运行task中的内容(resultmapTask/shuffleMapTask),然后执行write()方法
【DAGScheduler是高级调度器层】:按照stage对每个Job的各阶段计算有向无环图,跟踪rdd和每个stage的输出。找出最小调度,运行作业,将Stage对象以TaskSet方式交给底层调度器。底层调度器实现TaskScheduler,进而在集群上运行job。
【Task】:一般来说,一个 rdd 有多少个 partition,就会有多少个 task,因为每一个 task 只是处理一个 partition 上的数据。
【Stage】:task的集合,在shuffle的边界进行隔离(划分)。
- ShuffleMapStage:产生输出数据,在每次shuffle之前发生。可共享
- ResultStage:用于执行action动作的最终stage
【job】:提交给调度的顶层的工作项,是Stage集合。
- result job,计算ResultStage来执行action.
- map-state job,为shuffleMapState结算计算输出结果以供下游stage使用。