【问题标题】:Increasing available memory to Spark增加 Spark 的可用内存
【发布时间】:2015-01-21 22:09:06
【问题描述】:

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

export SPARK_MEM=1 g

或者我可以使用

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

我正在运行的进程需要超过 1g。我想使用 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

【问题讨论】:

  • “如何将作业分配到多个 Spark 安装” 是什么意思?如果你有一台机器,我假设你有一个 Spark 安装?
  • @Daniel Darabos 是的,我在一台机器上运行了一个 Spark 安装。但是因为我遇到了内存异常,所以我想将计算分配给多台机器。 Spark不需要安装在多台机器上来实现分布式计算吗?
  • 哦,那你就在正确的轨道上!您链接的文档正是您需要做的。祝你好运!

标签: scala apache-spark


【解决方案1】:

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

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

使用spark.shuffle.spill控制shuffles是否溢出,阅读“persistence”文档控制RDD缓存如何溢出http://spark.apache.org/docs/latest/programming-guide.html#rdd-persistence

【讨论】:

  • 感谢指正!我不明白为什么有人要使用 Scala,如果他们不使用 Spark :)。
  • 恕我直言,Scala 是未来的老兄 ;)
  • 我们应该修改哪种配置以强制溢出到磁盘?当我的 RAM (32GB) 已满且我的 SWAP (4GB) 时,服务器崩溃并变得无响应,所以我不相信它会像您在帖子中提到的那样工作,除非我更改某些参数(我找不到)。谢谢!
  • @Stephane 使用spark.shuffle.spill来控制shuffles是否溢出,并阅读“persistence”文档来控制RDD缓存如何溢出spark.apache.org/docs/latest/…
【解决方案2】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-24
    • 1970-01-01
    • 1970-01-01
    • 2014-11-19
    • 1970-01-01
    • 2015-10-17
    • 2015-10-06
    • 1970-01-01
    相关资源
    最近更新 更多