作者回复: 不错的技巧~
作者回复: 66666666666666666 x 10的6次幂,全场你最6~
作者回复: 正解~
作者回复: 入口其实都是runJob,driver首先创建并提交最后一个stage。然后依次向前回溯,边创建stage边提交,直到最前面的stage。 具体的代码调用,可以看看infoQ的那篇《权力的游戏:Spark调度系统》。链接我回头帮你搜搜,那篇代码路径写的非常清楚~ 链接:https://www.infoq.cn/article/5aOHzQIaXX6NlHriLtSI
作者回复: 666,没错,就是容错能力~
作者回复: 是的,不能单纯根据分区数完成判断。 看算子,分类讨论。一类算子会直接记录宽窄依赖关系,另一类算子通过判断partitioner与父依赖是否一致来决定。 你可以在源码的RDD目录下查一查,哪些算子属于第一类,哪些属于第二类~
作者回复: 哈哈,一起加油~
作者回复: 正解,能举例说明吗?
作者回复: 对,主要是从存储、计算分离的角度考虑这个问题,一旦两者分离,preferecneLocations就没有意义了~
作者回复: 对,是这个道理,不过要考虑,有些情况,可以数据不动代码动,有些情况,就必须要动数据了。这也是这个问题想要大家去深入思考的,要分类讨论。