我在AWS EMR-Spark上运行了一个应用程序。这里是火花提交工作; -
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个slave + 1个master),所有8个核心CPU。那么,如何只分配2个容器?</ p>
答案 0 :(得分:1)
你需要做的一件事。首先,您需要在capacity-scheduler.xml
"yarn.scheduler.capacity.resource-calculator":"org.apache.hadoop.yarn.util.resource.DominantResourceCalculator"
否则YARN将不会使用您指定的所有核心。其次,您需要实际指定所需的执行程序数量,以及您需要的内核数量以及您希望在执行程序上分配的内存量(如果您有许多shuffle分区或者你收集数据给司机)。
YARN旨在管理当时运行许多不同作业的群集,因此它不会默认将所有资源分配给单个作业,除非您通过设置上述设置强制它。此外,Spark的默认设置对于大多数作业来说也是不够的,您需要明确设置它们。请仔细阅读this blog post,以便更好地了解如何调整火花设置以获得最佳性能。