我有11个节点,每个节点有2G内存和16个核心,我尝试使用这个提交我的spark应用程序
./bin/spark-submit --class myapp.Main --master spark://Name:7077 --conf spark.shuffle.memoryFraction=0 --executor-memory 2G --deploy-mode client /home/mbala/fer/myjars7/etlpersist.jar /home/mfile80.csv
在 Slaves 文件中,我没有添加启动此命令的节点的 IP,因为我认为在客户端模式下,驱动程序必须在该节点中运行。
但是每当我尝试运行它时,我都会遇到内存不足异常(有时是因为 GC 或堆),我尝试了 Spark 网站以及 stackOverflow 中建议的许多解决方案,我还尝试最小化我的代码,我使用 MemoryAndDiskStorage 但即使这样我仍然有这个问题
Ps:我使用这条线是因为我在这个论坛中找到了它作为解决方案
--conf spark.shuffle.memoryFraction=0
我应该最小化核心数量吗?因为我觉得如果我用16核,只有2G内存的话,根本不够shuffle
您能否尝试在命令中使用小
g
和 --executor-memory
和 --driver-memory
选项来帮助您。
当您将执行器内存设置为
2GB
时。然后它只分配原始内存的0.6%
用于存储和执行,并从原始内存的0.5%
中取出0.6%
作为存储内存。因此,只有 0.5%
的内存仍然可供执行。
你应该了解内存管理这个概念。它将帮助您调试应用程序。