hadoop - Spark动态资源分配和排队的应用程序

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

根据此Cloudera documentation:

When Spark dynamic resource allocation is enabled, all resources are allocated to the first submitted job available causing subsequent applications to be queued up. To allow applications to acquire resources in parallel, allocate resources to pools and run the applications in those pools and enable applications running in pools to be preempted.



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

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

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

最佳答案

Spark动态分配

动态分配附带了按比例扩展和缩小执行者的策略,如下所示:

当存在待处理任务时,按比例放大策略会请求新的执行者,并且由于执行者启动缓慢且Spark应用程序可能需要更多时间,因此执行者数量呈指数增加。

缩减策略将删除空闲时间为spark.dynamicAllocation.executorIdleTimeout秒的执行程序。

Cloudera资源池

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

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

在以上情况下
场景1

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

方案2

当您运行这些示例时,作业所需的资源可能是较少的任务,并且动态分配不会使更多的执行者动摇(因为没有待处理的任务)。由于集群中有多余(未分配)资源,因此多个应用程序正在运行,而不是处于等待状态。

关于hadoop - Spark动态资源分配和排队的应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47043772/

相关文章:

python - Pyspark BinaryClassficationROC 下的指标区域

java - 将 JavaRDD<Tuple2<Object, long[]>> 转换为 Java 中的 Spark Dataset<Row>

networking - 亚马逊 EC2 - 网络问题

java - Java 如何接受我的自签名证书而无需将其添加到 Java 信任库

python - PySpark/Python:将字典python输出转换为RDD/或其他可保存(HDFS)格式

hadoop - 使用 hadoop 接近实时

hadoop - 安装Spark Hana连接器后HDFS损坏的文件

apache - Oozie: Action 通知邮件需要设置为高优先级

apache-spark - 如何在 spark 提交期间指定输出日志文件

amazon-ec2 - CDK/CloudFormation 批量设置不稳定错误