我正在使用YARN环境来运行spark程序,
选项--master yarn-cluster
。
当我打开一个spark应用程序的应用程序主人时,我在一个阶段看到了很多Scheduler Delay
。其中一些甚至超过10分钟。我想知道它们是什么以及为什么需要这么长时间?
更新: 通常,在执行程序真正开始执行任务之前,像aggregateByKey这样的操作会花费更多的时间(即调度程序延迟)。为什么?
答案 0 :(得分:13)
打开"显示其他指标" (单击向右指向的三角形使其指向下方)并将鼠标悬停在" Scheduler Delay"的复选框上。它显示了这个工具提示:
调度程序延迟包括将任务从调度程序发送到执行程序的时间,以及将任务结果从执行程序发送到执行程序的时间 调度程序。如果调度程序延迟很大,请考虑减少 任务规模或减少任务结果的大小。
调度程序是主服务器的一部分,它将作业划分为任务阶段,并与底层集群基础结构协同工作,以便将它们分布在集群中。
答案 1 :(得分:1)
查看TaskSetManager的课程评论:
..在TaskSchedulerImpl中的单个TaskSet中安排任务。此类跟踪每个任务,如果失败(最多有限次数)则重试任务,并通过延迟调度处理此TaskSet的 ocality-aware scheduling ...
我认为这是Matei Zaharia工作的下一篇论文的结果(Databricks的联合创始人和首席技术专家,也开发了Spark):https://cs.stanford.edu/~matei/
因此,Spark正在检查挂起任务的分区的位置。如果地点级别较低(例如,不在本地jvm上),则任务不会被直接杀死或忽略,而是获得启动延迟,这是公平的。