Spark Shuffle - 工人如何知道从哪里提取数据

Gop*_*pal 8 apache-spark

我试图理解Spark如何在引擎盖下改变依赖关系.因此我有两个问题:

  1. 在Spark中,执行者如何知道从其他执行器获取数据?

    • 每个执行者在完成其地图侧任务后,是否将其状态和位置更新为某个中央实体(可能是驱动程序)并减少侧执行者首先联系驱动程序以获取每个执行程序的位置,然后直接从这些执行程序中取出?
  2. 在具有随机播放依赖性的作业中,只有在所有地图侧任务完成后,驱动程序计划才会加入(或其他任务与shuffle依赖关系)?

    • 这是否意味着每个任务都会通知驱动程序其状态,驱动程序将及时协调其他相关任务.

Mou*_*oud 9

我会以点数回答您的问题

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/