我试图理解Spark如何在引擎盖下改变依赖关系.因此我有两个问题:
在Spark中,执行者如何知道从其他执行器获取数据?
在具有随机播放依赖性的作业中,只有在所有地图侧任务完成后,驱动程序计划才会加入(或其他任务与shuffle依赖关系)?
我会以点数回答您的问题
1.执行者如何知道还必须从哪些其他执行者那里提取数据? 只是执行者不知道其他执行者会做什么,但是Driver知道您可以认为此过程是当皇后和工人皇后将任务推给执行者,并且每个人都将结果返回给任务完成。
2.在每个执行者完成其地图任务后,是否将其状态和位置更新到某个中央实体(可能是驾驶员)?
是的,实际上驱动程序监视进程,但是当您创建SparkContext时,每个工作程序都会启动一个执行程序。这是一个单独的进程(JVM),它也会加载您的jar。执行程序将重新连接到您的驱动程序。现在,驱动程序可以向他们发送命令,例如您的示例中的flatMap,map和reduceByKey。驾驶员退出时,执行器将关闭。您也可以查看并查看此答案Spark中的任务是什么?Spark worker如何执行jar文件?
3.减少边执行者首先联系驱动程序,以获取要从中拉出的每个执行者的位置,然后直接从这些执行者中拉出? Reduce任务具有与运行数据的同一台计算机上运行的优先级,因此,除非数据不可用并且没有资源,否则不会有任何改组。
4.在具有混洗依赖性的作业中,驱动程序是否仅在所有地图侧任务完成后才调度联接(或其他与混洗依赖性有关的任务)?
它是可配置的,您可以更改它。您可以查看此链接以获取更多信息https://0x0fff.com/spark-architecture-shuffle/
5.这是否意味着每个任务都会通知驾驶员其状态,并且驾驶员会及时编排其他相关任务?
每个任务都会通知驾驶员并向他们发送心跳信号,并激发实施推测性执行技术。因此,如果任何任务失败/慢火花将运行另一任务。更多详细信息,请参见http://asyncified.io/2016/08/13/leveraging-spark-speculation-to-identify-and-re-schedule-slow-running-tasks/
归档时间: |
|
查看次数: |
1269 次 |
最近记录: |