Spark Shuffle - 工人如何知道从

时间:2017-02-08 06:17:43

标签: apache-spark

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

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

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

    • 这是否意味着每项任务都会通知驾驶员其状态,并且驾驶员会及时协调其他相关任务。

1 个答案:

答案 0 :(得分:9)

我将以分数回答你的问题

<强> 1。遗嘱执行人如何知道从其他执行者那里提取数据? 简单的执行者并不知道其他执行人员做了什么,但是司机知道你可以认为这个过程是王后和女王将任务推送给执行者,每个完成任务的结果都会返回。

<强> 2。每个执行者在完成其地图侧任务后,是否将其状态和位置更新为某个中央实体(可能是司机)

是的,实际上驱动程序监视进程但是当您创建SparkContext时,每个worker都会启动一个执行程序。这是一个单独的进程(JVM),它也会加载你的jar。执行程序连接回驱动程序。现在驱动程序可以发送命令,例如flatMap,map和reduceByKey。当驱动程序退出时,执行程序关闭。您还可以查看此答案What is a task in Spark? How does the Spark worker execute the jar file?

第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/