Spark如何在本地模式下处理内存?

时间:2017-08-29 08:12:44

标签: apache-spark

我试图了解Spark(2.1.1)如何在本地模式下处理内存。

据我了解,当我使用--driver-memory 3g启动spark-shell时:

  • 保留300MB
  • 使用了60%(默认为spark.memory.fraction) 其余的,在执行和存储之间共享 - 1.7GB

据推测,其中一些内容也与spark-shell和Spark UI共享。

查看正在运行的进程,我看到了一个新的启动后使用大约1GB RAM的spark-shell的java.exe进程。

如果我使用以下方法读取900MB CSV文件:

val data: DataFrame = spark.read.option("header", value = true).csv("data.csv")

然后反复调用data.count,我可以看到java.exe进程每次都会爬升,直到大约2GB的内存为止。

几个问题:

  1. 为什么它的上限为2GB?该数字是1.7GB可用+ 300MB保留?
  2. 那个记忆中究竟是什么,因为我没有缓存任何东西?
  3. 当它达到2GB上限时,后续调用data.count会发生什么?它显然在之前的通话中占用了更多的内存,那么为什么一旦它达到上限就不需要更多?

0 个答案:

没有答案