我正在运行一个存储在aws emr集群主节点上的pyspark代码(1个主节点和2个从节点,每个节点有8gbram和4个内核)- 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
我注意到两件事:
我使用ssh连接到从属节点,注意到其中一个从属节点根本没有被使用(使用htop)。附加屏幕截图。整个过程就是这样。我的电脑有问题吗 spark-submit
命令?2从节点截图
在提交申请之前,主节点8gb内存中的6.54gb已经在使用中(再次使用htop)。没有其他应用程序正在运行。为什么会这样?
2条答案
按热度按时间qf9go6mv1#
首先,您使用了--deploy模式
cluster
这意味着主节点不被计算在内,只有核心/任务节点的资源被认为有资格启动spark executor/driver。单击此处了解有关
client
以及cluster
部署模式。第二:检查属性的示例类型配置
yarn.scheduler.maximum-allocation-mb
这是可以分配给驱动程序/执行程序的最大可用内存。第三:调整大小例如,如果类型为c5.xlarge yarn.scheduler.maximum-allocation-mb=6144的核心/任务节点,每个节点可以启动一个5.5 gb的执行器(默认情况下,-executor memory=5g+10%memoryoverhead)。驱动程序(2gb)将在单个节点上启动,而另一个节点将启动单个执行器。
建议:将6144/2分开,这样每个节点可以启动2个执行器,一个节点将启动1个执行器和驱动程序(1个驱动程序+3个执行程序)。
bxpogfeg2#
您已指定
--num-executors 3
所以总共有4个执行者(1个司机+3个)因此,对于每个工作节点,您有4个vcore和8gb的ram。
根据你的配置-
驱动程序将使用1 vcore和2gb内存。
每个执行器将使用3个vCore和5gb内存。
因此,查看您的配置,您的程序应该同时使用两个工作节点。因为一个节点不足以容纳所有资源。
我建议你去看看
Yarn用户界面
http://<master-ip>:8088
spark历史服务器uihttp://<master-ip>:18080
查看这些执行器在哪个节点上启动(每个执行器将与节点ip关联)以及它们有多少个。你可以通过导航到特定的工作来检查。还可以从spark ui验证每个执行器使用了多少内存和cpu。