spark 作业利用所有节点

spark job leverage all nodes

所以我在 AWS 上的设置是 1 个主节点和 2 个执行节点。 我希望两个执行器节点都能完成我的任务,但我只能看到一个正常注册,另一个作为 ApplicationMaster。我也可以看到当时处理了16个分区

我现在使用 spark-shell。所有默认设置,EMR 4.3。启动 shell 的命令:

export SPARK_EXECUTOR_MEMORY=20g
export SPARK_DRIVER_MEMORY=4g
spark-shell --num-executors 2 --executor-cores 16 --packages com.databricks:spark-redshift_2.10:0.6.0 --driver-java-options "-Xss100M" --conf spark.driver.maxResultSize=0

知道从哪里开始调试吗?或者这是正确的行为?

我认为问题是您 运行 处于 'cluster' 模式并且 spark 驱动程序 运行 在其中一个执行节点上的应用程序主机中,并使用 1 个核心.因此,因为您的执行程序需要 16 个核心,其中一个节点只有 15 个可用核心,并且没有启动第二个执行程序所需的资源。您可以通过查看 YARN UI 中的 "Nodes" 来验证这一点。 解决方案可能是在客户端模式 --deploy-mode client 中启动 spark shell 或更改执行程序内核的数量。