【问题标题】:Increase memory available to PySpark at runtime在运行时增加 PySpark 可用的内存
【发布时间】:2015-10-06 12:28:36
【问题描述】:

我正在尝试使用 Spark 构建推荐器,但内存不足:

Exception in thread "dag-scheduler-event-loop" java.lang.OutOfMemoryError: Java heap space

我想通过在运行时修改 PySpark 中的 spark.executor.memory 属性来增加 Spark 的可用内存。

这可能吗?如果有,怎么做?

更新

受@zero323 评论中的链接启发,我尝试在 PySpark 中删除并重新创建上下文:

del sc
from pyspark import SparkConf, SparkContext
conf = (SparkConf().setMaster("http://hadoop01.woolford.io:7077").setAppName("recommender").set("spark.executor.memory", "2g"))
sc = SparkContext(conf = conf)

返回:

ValueError: Cannot run multiple SparkContexts at once;

这很奇怪,因为:

>>> sc
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'sc' is not defined

【问题讨论】:

  • “运行时”是什么意思?通过修改现有的SparkContext?
  • 是的,完全正确。我想增加 PySpark 会话中的内存量。
  • 在会话中,您 stop existing context and create new one 使用特定设置,但据我所知,您无法修改现有设置。
  • 而不是del sc你需要停止上下文:sc.stop()

标签: apache-spark pyspark


【解决方案1】:

您可以在启动pyspark-shell时设置spark.executor.memory

pyspark --num-executors 5 --driver-memory 2g --executor-memory 2g

【讨论】:

  • 虽然这确实有效,但它并不能直接解决用例,因为它需要预先更改 python/pyspark 的启动方式。对于那些需要解决内联用例的人,请查看 abby 的答案。
  • 这在我的情况下效果更好,因为会话中的更改需要重新验证
【解决方案2】:

当需要重新启动 shell 并使用不同的命令打开时,我不确定您为什么选择上面的答案!尽管这可行且有用,但实际上有一个在线解决方案是需要的。这本质上是上面 cmets 中引用的 @zero323,但链接指向描述 Scala 实现的帖子。以下是专门针对 PySpark 的工作实现。

注意:您要修改设置的 SparkContext 必须尚未启动,否则您需要将其关闭、修改设置并重新打开。

from pyspark import SparkContext
SparkContext.setSystemProperty('spark.executor.memory', '2g')
sc = SparkContext("local", "App Name")

来源: https://spark.apache.org/docs/0.8.1/python-programming-guide.html

附言如果您需要关闭 SparkContext,只需使用:

SparkContext.stop(sc)

并仔细检查您可以使用的当前设置:

sc._conf.getAll()

【讨论】:

  • 太棒了!我一直在到处寻找这个!
  • 有没有办法将其设置为'max'?
【解决方案3】:

据我所知,在运行时无法更改 spark.executor.memory。数据节点上的容器甚至会在 spark-context 初始化之前创建。

【讨论】:

    【解决方案4】:

    引用this,在2.0.0之后你不必使用SparkContext,而是SparkSessionconf方法如下:

    spark.conf.set("spark.executor.memory", "2g")
    

    【讨论】:

    • 这是 Scala,而不是 Python。
    猜你喜欢
    • 2019-11-17
    • 2020-05-23
    • 1970-01-01
    • 2015-12-17
    • 2019-07-17
    • 2017-09-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多