增加Spark的可用内存

时间:2014-05-10 10:47:15

标签: scala apache-spark

为了增加我使用的MAX可用内存:

export SPARK_MEM=1 g

或者我可以使用

val conf = new SparkConf()
             .setMaster("local")
             .setAppName("My application")
             .set("spark.executor.memory", "1g")
val sc = new SparkContext(conf)

我正在运行的过程需要超过1克。我想使用20g,但我只有8g的RAM可用。作为Spark工作的一部分,磁盘存储器是否可以使用RAM存储器进行扩充,如果是这样,这是如何实现的?

是否有Spark文档描述如何将作业分发到多个Spark安装?

对于spark配置我使用所有默认值(在http://spark.apache.org/docs/0.9.0/configuration.html指定),除了我上面指定的内容。 我有一个以下的机器实例:

CPU : 4 cores
RAM : 8GB
HD : 40GB

更新:

我认为这是我正在寻找的文档:http://spark.apache.org/docs/0.9.1/spark-standalone.html

2 个答案:

答案 0 :(得分:9)

如果你的工作不适合内存,Spark会自动溢出到磁盘 - 你不需要设置交换 - 即Daniel的答案有点不准确。您可以使用配置设置配置将要和不会溢出到磁盘的处理类型:http://spark.apache.org/docs/0.9.1/configuration.html

在单个机器上使用Spark也是一个好主意,因为这意味着如果您需要扩展应用程序,您将免费扩展 - 您编写的运行1节点的相同代码将工作N节点。当然,如果您的数据永远不会增长,那么是的,坚持使用纯Scala。

使用spark.shuffle.spill来控制是否随机播放,并阅读"持久性"用于控制RDD缓存溢出的文档http://spark.apache.org/docs/latest/programming-guide.html#rdd-persistence

答案 1 :(得分:2)

如果您尝试在单台计算机上解决问题,我认为使用Spark并不实际。 Spark的观点在于它提供了一种在多台机器上分配计算的方法,特别是在数据不适合单台机器的情况下。

也就是说,只需将spark.executor.memory设置为20g即可获得20 GB的虚拟内存。物理内存耗尽后,将使用交换。如果配置了足够的交换,则可以使用20 GB。但是,当您的流程开始交换时,您的流程很可能会变慢。