我将Spark作为三个节点(1个主节点和2个从属节点)独立使用。并且我发现即使我指定了dvc.filename = gists[indexPath.row].files.key
dvc.rawUrl = gists[indexPath.row].files.value
和--driver-memory
,最大内存也逐渐增加,并且变得越来越慢,最终遇到内存已满错误
这就是我运行Spark提交的方式
--executor-memory
我无法共享全部代码,因为它很大,但是主要工作是迭代列表并为每个元素计算一些建议,每次迭代我都在下面打印此代码
sudo /home/ubuntu/spark-2.3.0-bin-hadoop2.7/bin/spark-submit \
--executor-memory 12g --executor-cores 6 \
--driver-memory 12G --driver-cores 8 \
--master spark:url:7077
当我的火花刚刚开始运行时,“最大内存”就很低,如val runtime = Runtime.getRuntime
val mb = 1024*1024
somelist.foreach(x => {
...
println(s"recs for petId: $pet done, took " + (System.nanoTime - startTime) / 1e9d + " secs")
println("** Used Memory: " + (runtime.totalMemory - runtime.freeMemory) / mb)
println("** Free Memory: " + runtime.freeMemory / mb)
println("** Total Memory: " + runtime.totalMemory / mb)
println("** Max Memory: " + runtime.maxMemory / mb)
...
})
,但是随着它的运行,它会像4551
一样逐渐增加,但是如果我未指定11532
,则最大内存将--driver-memory 12G
不对,因为我的驱动程序节点只有16G内存。
起初,我认为这是25345
的问题,所以我在第100次迭代中添加了GC
,似乎可以与System.gc()
一起工作,但是Used Memory
仍然相同。这是否意味着内存泄漏?还是有一些我可以签出的清单?预先感谢