Spark Job的提交与task本地化分析(源码阅读八)
我们又都知道,Spark中任务的处理也要考虑数据的本地性(locality),Spark目前支持PROCESS_LOCAL(本地进程)、NODE_LOCAL(本地节点)、NODE_PREF、RACK_LOCAL(本地机架)、ANY(任何)几种。其他都很好理解,NODE_LOCAL会在spark日志中执行拉取数据所执行的task时,打印出来,因为Spark是移动计算,而不是移动数据的嘛。 那么什么是NODE_PREF? 当Driver应用程序刚刚启动,Driver分配获得的Executor很可能还没有初始化,所以有一部分任务的本地化级别被设置为NO_PREF.如果是ShuffleRDD,其本地性始终为NO_PREF。这两种本地化级别是NO_PREF的情况,在任务分配时会被优先分配到非本地节点执行,达到一定的优化效果。 那么下来我们从job的任务提交开始玩起~ getMissingParentStages方法用来找到Stage的所有不可用的父Stage.从代码可以到这里是个递归的调用,submitWaitingStages实际上循环waitingStages中的stage并调用subm...