我正在ec2集群上使用spark-2.4.7-without-hadoop和hadoop-3.2.2,配置为:
主机(一个ec2 c4.2xlarge)有16gbram和8vcpu(4个物理核和超线程因子2);4个从机(每个从机是一个ec2 m4.xlarge)每个都有15gb的ram和4vcpu(4个物理核)。
我提交了一个应用程序jar,使用spark submit在客户机模式下的yarn集群上运行。我在主机上触发Spark提交,如下所示: ${SPARK_HOME}/bin/spark-submit --master yarn --deploy-mode client --driver-memory 12g --executor-memory 12g --executor-cores 3 --class ClassName App.jar argsToApp
位于${spark\u home}/logs/的主机的spark日志文件在spark命令中有一个-xmx1g。这使我相信命令行驱动程序内存没有分配给我的应用程序。很快,我的申请就以失败告终 Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
有时抛出的异常是 java.lang.OutOfMemoryError : GC overhead limit exceeded
在上一个之前我尝试过的另一件事是:我用以下代码修改了${spark\u home}/conf/spark-defaults.conf
spark.yarn.am.memory 12g
spark.yarn.am.cores 3
主程序的日志在spark命令中仍然显示-xmx1g,并且应用程序因错误而终止 java.lang.OutOfMemoryError : GC overhead limit exceeded
myyarn-site.xml的相关属性如下:
<!-- number of physical cores available per data node -->
<property>
<name>yarn.nodemanager.resource.cpu-vcores</name>
<value>4</value>
</property>
<!-- the total RAM available per data node. amount of physical memory that can be allocated for containers aka amount of memory YARN can use on this node. This property should be lower than total memory of the machine. For example, leave 1GB out of the physical memory for host OS and other daemons-->
<property>
<name>yarn.nodemanager.resource.memory-mb</name>
<!-- <value>12288</value> -->
<!-- <value>16384</value> -->
<value>15360</value>
</property>
<!-- the minimum RAM in MB to allocate per container. These ranges are used for decided whether requested spark executors can be fulfilled or not. If very high number of executors are requested then this min will be allocated to the containers. -->
<property>
<name>yarn.scheduler.minimum-allocation-mb</name>
<value>8192</value>
</property>
我已经提到了这些问题:1、2、3(这个答案提到要通过-xmx更改java应用程序的堆大小,但我不知道如何以及在哪里做),4;以及spark-2.4.7的文档,这里讨论的是配置 spark.yarn.am.memory
以及 spark.yarn.am.cores
在客户机模式下运行Yarn时。
请指出我遗漏了什么。谢谢你的时间和关注。
暂无答案!
目前还没有任何答案,快来回答吧!