在运行时增加 PySpark 可用的内存
Increase memory available to PySpark at runtime
我正在尝试使用 Spark 构建推荐系统,只是 运行 内存不足:
Exception in thread "dag-scheduler-event-loop" java.lang.OutOfMemoryError: Java heap space
我想通过在运行时修改 PySpark 中的 spark.executor.memory
属性 来增加 Spark 可用的内存。
这可能吗?如果是,怎么做?
更新
受到@zero323 评论中link的启发,我尝试删除并重新创建 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
您可以在启动 pyspark-shell
时设置 spark.executor.memory
pyspark --num-executors 5 --driver-memory 2g --executor-memory 2g
我不确定你为什么选择上面的答案,因为它需要重新启动 shell 并使用不同的命令打开!尽管这可行并且很有用,但实际上有一个在线解决方案是所要求的。这基本上就是@zero323 在上面的评论中引用的内容,但是 link 导致 post 描述了 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
p.s。如果您需要关闭 SparkContext,只需使用:
SparkContext.stop(sc)
要仔细检查已设置的当前设置,您可以使用:
sc._conf.getAll()
据我所知,不可能在 运行 时更改 spark.executor.memory。数据节点上的容器甚至会在 spark-context 初始化之前创建。
引用this,在2.0.0之后你不必使用SparkContext
,而是SparkSession
和conf
方法如下:
spark.conf.set("spark.executor.memory", "2g")
我正在尝试使用 Spark 构建推荐系统,只是 运行 内存不足:
Exception in thread "dag-scheduler-event-loop" java.lang.OutOfMemoryError: Java heap space
我想通过在运行时修改 PySpark 中的 spark.executor.memory
属性 来增加 Spark 可用的内存。
这可能吗?如果是,怎么做?
更新
受到@zero323 评论中link的启发,我尝试删除并重新创建 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
您可以在启动 pyspark-shell
spark.executor.memory
pyspark --num-executors 5 --driver-memory 2g --executor-memory 2g
我不确定你为什么选择上面的答案,因为它需要重新启动 shell 并使用不同的命令打开!尽管这可行并且很有用,但实际上有一个在线解决方案是所要求的。这基本上就是@zero323 在上面的评论中引用的内容,但是 link 导致 post 描述了 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
p.s。如果您需要关闭 SparkContext,只需使用:
SparkContext.stop(sc)
要仔细检查已设置的当前设置,您可以使用:
sc._conf.getAll()
据我所知,不可能在 运行 时更改 spark.executor.memory。数据节点上的容器甚至会在 spark-context 初始化之前创建。
引用this,在2.0.0之后你不必使用SparkContext
,而是SparkSession
和conf
方法如下:
spark.conf.set("spark.executor.memory", "2g")