【问题标题】:AWS EMR- Yarn ContainerAWS EMR-纱线容器
【发布时间】:2018-04-28 07:13:50
【问题描述】:

我在 AWS EMR-Spark 上运行一个应用程序。这里是 spark-submit 作业;-

Arguments : spark-submit --deploy-mode cluster --class com.amazon.JavaSparkPi s3://spark-config-test/SWALiveOrderModelSpark-1.0.assembly.jar s3://spark-config-test/2017-08-08

AWS 使用 YARN 进行资源管理。我正在查看指标(下面的屏幕截图),但对 YARN“容器”指标有疑问。

这里,分配的容器显示为 2。但是,我使用的是 4 个节点(3 个从站 + 1 个主站),所有 8 核 CPU。那么,如何只分配 2 个容器?

【问题讨论】:

  • 您为这项工作分配了多少内核内存?请记住,您的一个节点运行应用程序管理器,该管理器在该节点上保留 1 个核心。因此,如果您尝试为每个执行器分配 8 个核心,它只会启动 2 个执行器。
  • 应用管理器在主节点上运行对吧?另外,我没有指定任何内核内存,所以它必须选择一些默认值。
  • 不,AM 在从属设备上运行 - 而不是在驱动程序上运行。您是否记得使用此设置调整capacity-scheduler.xml:"yarn.scheduler.capacity.resource-calculator":"org.apache.hadoop.yarn.util.resource.DominantResourceCalculator"?你需要指定你想要的执行者的数量。 YARN 不会自动使用您的整个集群。

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


【解决方案1】:

您需要做的几件事。首先需要在capacity-scheduler.xml中设置如下配置

"yarn.scheduler.capacity.resource-calculator":"org.apache.hadoop.yarn.util.resource.DominantResourceCalculator"

否则 YARN 将不会使用您指定的所有核心。其次,您需要实际指定您需要的执行器数量,以及您需要的核心数量以及您希望在执行器上分配的内存量(如果您有很多随机分区或者如果您收集数据给司机)。

YARN 旨在管理同时运行许多不同作业的集群,因此默认情况下它不会将所有资源分配给单个作业,除非您通过设置上述设置来强制它。此外,Spark 的默认设置也不足以满足大多数作业,您需要明确设置它们。请阅读this blog post 以更好地了解如何调整火花设置以获得最佳性能。

【讨论】:

  • 我指定执行器数量为10,核心数量为4,分配的容器为6(数据的最大分区)。谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-09-10
  • 1970-01-01
  • 2016-04-29
  • 2017-05-18
  • 2018-04-17
  • 1970-01-01
相关资源
最近更新 更多