我正在尝试了解Spark如何在后台洗牌依赖关系。因此,我有两个问题:
直接从那些执行者那里拉出来,然后再从它们那里拉出来?
最佳答案
我会以点数回答您的问题
1.执行者如何知道还必须从哪些其他执行者那里提取数据?
只是执行者不知道其他执行者会做什么,但是Driver知道您可以认为此过程是当皇后和 worker 皇后将任务推给执行者,并且每个人都将结果返回给任务。
2.在执行其 map task 后,每个执行者是否将其状态和位置更新到某个中央实体(可能是驱动程序)
是的,实际上驱动程序监视进程,但是当您创建SparkContext时,每个工作程序都会启动一个执行程序。这是一个单独的进程(JVM),它也会加载您的jar。执行程序重新连接到您的驱动程序。现在,驱动程序可以向他们发送命令,例如您的示例中的flatMap,map和reduceByKey。当驾驶员退出时,执行器将关闭。您也可以检查一下这个答案What is a task in Spark? How does the Spark worker execute the jar file?
3.减少侧面执行者首先与驱动程序联系,以获取要从中撤回然后直接从这些执行者撤回的每个执行者的位置?
Reduce任务具有与运行数据的同一台计算机上运行的优先级,因此,除非数据不可用并且没有资源,否则不会有任何改组。
4.在具有随机更改依赖关系的作业中,是否仅在所有 map 侧任务完成后,驱动程序调度联接(或其他与随机更改依赖关系相关的任务)?
它是可配置的,您可以更改它。您可以查看此链接以获取更多信息https://0x0fff.com/spark-architecture-shuffle/
5.这是否意味着每个任务都会将其状态通知驱动程序,并且驱动程序将及时编排其他相关任务?
每个任务都会通知驾驶员并向他们发送心跳信号,并激发实现推测性执行技术。因此,如果任何任务失败/缓慢 Spark 将运行另一任务。此处有更多详细信息http://asyncified.io/2016/08/13/leveraging-spark-speculation-to-identify-and-re-schedule-slow-running-tasks/
关于apache-spark - Spark Shuffle- worker 如何知道从何处提取数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42105985/