spark 和 YARN 中的调度程序延迟时间
Scheduler delay time in spark and YARN
我正在 Spark 中进行一些检测,我意识到我的一些任务需要很长时间才能完成,因为可以从 TaskMetrics 中提取调度程序延迟时间。
我知道已经有一些关于这个主题的问题 What is scheduler delay in spark UI's event timeline 但答案没有被接受并且它说等待开放槽的任务被认为是调度程序延迟,我认为这是不正确的(据我知道如果任务在执行程序中没有插槽,它就不会开始生成指标)。
我对延迟真正从哪里开始感到有点困惑。我想知道这个延迟时间是否也考虑了应用程序被 YARN 客户端接受和提交应用程序的第一个作业之间的时间。或者换句话说,在应用程序被接受的这一刻之间:
而这个 运行:
我通过在集群中可用资源很少的情况下启动一个应用程序来直接检查。它一直在队列中,直到可以为该阶段启动足够的执行程序。然后 yarn.Client 在集群中启动阶段。 spark 中的指标不会将队列中的这个时间视为任何延迟。同样,如果您的任务多于我在上面发布的堆栈溢出答案之类的核心,也没关系。任务将在执行程序可用时分配。
简而言之,调度器延迟时间只考虑将任务发送给执行器。如果这里有延迟,YARN 不是瓶颈,而是所涉及节点的负载(通常是驱动程序和带有应用程序执行程序的工作节点)
我正在 Spark 中进行一些检测,我意识到我的一些任务需要很长时间才能完成,因为可以从 TaskMetrics 中提取调度程序延迟时间。 我知道已经有一些关于这个主题的问题 What is scheduler delay in spark UI's event timeline 但答案没有被接受并且它说等待开放槽的任务被认为是调度程序延迟,我认为这是不正确的(据我知道如果任务在执行程序中没有插槽,它就不会开始生成指标)。
我对延迟真正从哪里开始感到有点困惑。我想知道这个延迟时间是否也考虑了应用程序被 YARN 客户端接受和提交应用程序的第一个作业之间的时间。或者换句话说,在应用程序被接受的这一刻之间:
而这个 运行:
我通过在集群中可用资源很少的情况下启动一个应用程序来直接检查。它一直在队列中,直到可以为该阶段启动足够的执行程序。然后 yarn.Client 在集群中启动阶段。 spark 中的指标不会将队列中的这个时间视为任何延迟。同样,如果您的任务多于我在上面发布的堆栈溢出答案之类的核心,也没关系。任务将在执行程序可用时分配。
简而言之,调度器延迟时间只考虑将任务发送给执行器。如果这里有延迟,YARN 不是瓶颈,而是所涉及节点的负载(通常是驱动程序和带有应用程序执行程序的工作节点)