为了增加我使用的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
答案 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。但是,当您的流程开始交换时,您的流程很可能会变慢。