【问题标题】:Spark Shuffle - How workers know where to pull data fromSpark Shuffle - 工作人员如何知道从哪里提取数据
【发布时间】:2017-06-25 15:35:31
【问题描述】:

我试图了解 Spark 是如何在底层对依赖项进行洗牌的。因此我有两个问题:

  1. 在 Spark 中,执行程序如何知道它必须从哪些其他执行程序中提取数据?

    • 是否每个执行器在完成其地图端任务后,将其状态和位置更新到某个中心实体(可能是驱动程序)并减少端执行器首先联系驱动程序以获取每个执行器的位置 从那些执行者那里直接拉取然后再拉取?
  2. 在具有 shuffle 依赖性的作业中,驱动程序是否仅在所有 map 端任务完成后才安排加入(或其他依赖于 shuffle 的任务)?

    • 是否意味着每个任务都会通知驱动程序其状态,驱动程序会及时编排其他依赖的任务。

【问题讨论】:

    标签: apache-spark


    【解决方案1】:

    我会分分回答你的问题

    1.执行者如何知道它必须从哪些其他执行者那里提取数据? 简单的 executor 不知道其他 executor 做什么,但是 Driver 知道你可以把这个过程想象成 Queen 和 worker,queen 将任务推送给 executor,每个人完成任务并返回结果。

    2。每个执行者在完成其地图端任务后,是否将其状态和位置更新到某个中心实体(可能是驱动程序)

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

    3.减少侧执行器首先联系驱动程序以获取每个执行器的位置以从中提取,然后直接从这些执行器中提取? Reduce 任务优先在运行数据的同一台机器上运行,因此不会有任何 shuffle,除非数据不可用且没有资源。

    4.在具有 shuffle 依赖的作业中,驱动程序是否仅在所有 map 端任务完成后才安排 join(或其他依赖 shuffle 的任务)?

    它是可配置的,您可以更改它。您可以查看此链接以获取更多信息https://0x0fff.com/spark-architecture-shuffle/

    5.是不是每个task都会通知driver自己的状态,driver会及时编排其他依赖的task?

    每个任务都通知并发送心跳给驱动程序和火花实现推测执行技术。因此,如果任何任务失败/缓慢火花将运行另一个。更多细节在这里http://asyncified.io/2016/08/13/leveraging-spark-speculation-to-identify-and-re-schedule-slow-running-tasks/

    【讨论】:

    • 谢谢穆斯塔法。信息非常有帮助。我需要对问题#3 进行澄清:假设有一个任务具有 shuffleRDD 依赖项。据我了解,每个 Map 任务都会将其输出写入 它的本地磁盘。文件的数量将取决于 reducer 和分区的数量。当 reducer 被调度时,它们直接从映射器节点获取这些数据。因此,reducer 需要知道映射器节点的网络地址以及为此 reducer 编写的文件的名称。 reducer 是如何获取这些信息的? (看过 MapOutputTracker 源码,但无法理解)。
    • 第一:Spark默认配置是不写入磁盘(可以改成MEMORY_AND_DISK OR DISK_ONLY OR MEMORY_ONLY)但是保持在你脑子里如果是磁盘性能会很差。 第二:考虑你的情况,实际上驱动程序是map和reduce之间的主要通道。因此,除非驱动程序通知,否则减速器不知道任何信息,而且所有配置都来自驱动程序而不是减速器。总结地图任务完成,然后通知驱动程序任务,然后驱动程序根据您的作业配置触发减速器以启动。如果是,请将我的答案标记为真实。
    猜你喜欢
    • 2020-12-13
    • 2015-08-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-05
    相关资源
    最近更新 更多