【问题标题】:Spark Dynamic Resource Allocation and Queued ApplicationsSpark 动态资源分配和排队应用程序
【发布时间】:2018-04-13 02:47:25
【问题描述】:

据此Cloudera documentation

启用 Spark 动态资源分配后,所有资源都会分配给第一个可用的提交作业,从而导致后续应用程序排队。为了允许应用程序并行获取资源,请将资源分配给池并在这些池中运行应用程序,并使运行在池中的应用程序被抢占。

我自己也观察到了这种行为,但是我目前正在处理一个只有 2 个节点(EMR 上的 m3.xlarge)和 1 个主节点(r3.xlarge)的小型集群。我看到的是,如果我提交多个 spark 应用程序(对 spark-submit 的不同调用),当我在 EMR 上查找我的资源管理器时,所有应用程序都被接受,但一次只有一个运行。

现在这可能是因为我正在读取大约 2GB 的文件并且我的资源已用完。我还尝试使用 Spark 中现有的 pi.py 示例进行一些 spark-submit 调用。在这种情况下,我可以看到多个处于运行状态的作业。

鉴于此,Cloudera 文档是正确的还是具有误导性?如果我有一个更大的集群,我会看到多个应用程序并行运行吗?

【问题讨论】:

    标签: hadoop apache-spark amazon-ec2 hadoop-yarn amazon-emr


    【解决方案1】:

    Spark 动态分配

    Dynamic Allocation 附带了执行器向上和向下扩展的策略,如下所示:

    当有待处理的任务时,Scale Up Policy 会请求新的执行器,并以指数方式增加执行器的数量,因为执行器启动缓慢,Spark 应用程序可能需要更多。

    Scale Down Policy 移除已经空闲了 spark.dynamicAllocation.executorIdleTimeout 秒的执行器。

    Cloudera 资源池

    所以 cloudera 的意思是,由于 待处理的任务,可能有一个作业可能占用所有资源,请创建 yarn ques 并为每个 ques 分配特定数量的资源。请点击链接如何创建纱线问题。

    https://discuss.pivotal.io/hc/en-us/articles/201623853-How-to-configure-queues-using-YARN-capacity-scheduler-xml

    以上情况 场景 1

    在您的工作中,可能会有更多的待处理任务,并且由于动态资源分配,大部分资源被分配给单个工作,即使您提交了下一个应用程序,它也会由于资源而处于等待状态。

    场景 2

    当您运行这些示例时,作业所需的资源可能是更少的任务和动态分配,而不是旋转更多的执行器(因为没有待处理的任务)。由于集群中有额外的(未分配的)资源,接下来会运行多个应用程序而不是等待状态。

    【讨论】:

    • 关于我的示例,有两种不同的场景:1)我提交了多个“大型”应用程序。我的意思是这些应用程序将需要大量内存来处理。在这种情况下,应用程序都被接受并排队,但一次只有一个正在运行。 2)我提交了多个“小”应用程序,例如现有示例来计算 Pi。在这里,我可以看到同时处于运行状态的多个应用程序。所以在后一种情况下,所有资源都没有被单个应用程序用完,否则我不会看到多个任务“运行”?
    猜你喜欢
    • 1970-01-01
    • 2016-03-09
    • 2018-12-07
    • 2021-11-24
    • 2015-01-19
    • 2018-06-17
    • 1970-01-01
    • 1970-01-01
    • 2021-10-13
    相关资源
    最近更新 更多