未使用 AWS EMR 上的 1 个从属节点



我正在使用以下命令运行存储在 AWS EMR 集群(1 个主节点和 2 个从节点,每个主节点和 8GB RAM 和 4 个内核)上的 pyspark 代码 -

spark-submit --master yarn --deploy-mode cluster --jars /home/hadoop/mysql-connector-java-5.1.45/mysql-connector-java-5.1.45-bin.jar --driver-class-path /home/hadoop/mysql-connector-java-5.1.45/mysql-connector-java-5.1.45.jar --conf spark.executor.extraClassPath=/home/hadoop/mysql-connector-java-5.1.45/mysql-connector-java-5.1.45.jar --driver-memory 2g --executor-cores 3 --num-executors 3 --executor-memory 5g mysql_spark.py

我注意到两件事:

  1. 我通过 SSH 连接到从属节点,我注意到其中一个从属节点根本没有被使用(为此使用 htop)。附上屏幕截图。这就是它自始至终的样子。我的spark-submit命令有问题吗? 2 个从节点截图
  1. 在提交申请之前,6.54GB 的 8GB 主节点 RAM 已经在使用中(再次使用 htop)。没有其他应用程序正在运行。为什么会这样?

首先,您使用了 --deploy-mode 进行cluster这意味着不计算主节点,并且只考虑核心/任务节点的资源并有资格启动 Spark 执行器/驱动程序。

单击此处了解有关clientcluster部署模式之间区别的更多信息。

第二:检查实例类型的配置以获取属性yarn.scheduler.maximum-allocation-mb哪个是可以分配给驱动程序/执行程序的最大可用内存。

第三:大小调整例如,如果类型为 c5.xlarge 的核心/任务节点 yarn.scheduler.maxum-allocation-mb = 6144 每个节点可以启动单个执行器 5.5 GB(--executor-memory = 5g + 10% 内存默认开销)。一个驱动程序(2GB)将在单个节点上启动,另一个节点将启动单个执行器。

建议:将 6144/2 除以,以便每个节点可以启动 2 个执行程序,一个节点将启动 1 个执行器和驱动程序(1 个驱动程序 + 3 个执行程序)。

您已经指定了--num-executors 3,因此总共将有 4 个执行器(1 个驱动程序 + 3)

因此,对于每个工作器节点,您有 4 个 vCore 和 8GB 内存。

根据您的配置 -

  • 驱动程序将使用 1 个 vCore 和 2GB 内存。
  • 每个执行程序将使用 3 个 vCore 和 5GB 内存。

因此,查看您的配置,您的程序应该同时使用两个工作节点。因为一个节点不足以容纳所有资源。


我会建议请去检查

  1. 纱线用户界面http://<master-ip>:8088
  2. Spark 历史记录服务器 UIhttp://<master-ip>:18080

查看这些执行器在哪个节点中启动(每个执行程序将与节点 IP 相关联)以及它们的数量。您可以通过导航到该特定作业来检查这一点.
还可以从 Spark UI 验证每个执行程序使用了多少内存和 cpu。

相关内容

  • 没有找到相关文章

最新更新