【问题标题】:Apache Spark DAGScheduler Flow of DataApache Spark DAGScheduler 数据流
【发布时间】:2018-02-27 11:41:10
【问题描述】:

我试图了解 Apache Spark 调度程序的工作原理。为此,我设置了一个包含一个主节点和两个工作节点的本地集群。我只提交了一个应用程序,它只是读取 4 个文件(2 个小文件(~10MB)和 2 个大文件(~1,1GB)),加入它们并收集结果。另外,我将这两个小文件缓存在内存中。

我正在使用 FIFO 运行独立集群模式。我已经了解阶段是如何形成的,但我无法弄清楚数据流是如何确定的(箭头)。当我查看 SparkUI 时,我注意到每次,即使阶段以相同的方式形成,箭头(我猜的数据流和控制流)都是不同的。这就像调度程序不确定地工作。

我已经阅读了 Jacek Laskowski 书中的相关章节(关于 DAG 和任务调度程序),但我仍然不清楚控制流是如何确定的。提前感谢您的帮助。

干杯,

吉姆

【问题讨论】:

  • 直到现在我才注意到你引用了我的 gitbook! :) 谢谢。如果有任何不清楚的地方,请随时通知我们。

标签: apache-spark scheduled-tasks scheduler


【解决方案1】:

这就像调度程序的工作是不确定的。

是的,调度任务有一些随机性,以使其更“公平”。从这个意义上说,Spark 调度程序确实“非确定性地”工作,但在可接受的执行位置限制内(即,将具有较少位置偏好的任务分配给执行程序)。

Apache Spark 中为任务集(对应于阶段)选择任务的组件是TaskSetManager:

在TaskSchedulerImpl 的单个TaskSet 中调度任务。此类跟踪每个任务,如果任务失败(最多限制次数)重试任务,并通过延迟调度处理此任务集的位置感知调度。它的主要接口是 resourceOffer,它询问 TaskSet 是否要在一个节点上运行任务,以及 statusUpdate,它告诉它其中一个任务改变了状态(例如完成)。

【讨论】:

    猜你喜欢
    • 2018-02-21
    • 2018-12-29
    • 2018-04-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-18
    • 2018-09-15
    • 2017-08-13
    相关资源
    最近更新 更多