如何设置/获取 Spark 的堆大小(通过 Python 笔记本)

数据挖掘 阿帕奇火花 pyspark 蟒蛇 蟒蛇
2021-10-14 06:09:18

我在 macbook pro 上使用 IPython 笔记本中的 Spark (1.5.1)。安装 Spark 和 Anaconda 后,我通过执行以下命令从终端启动 IPython IPYTHON_OPTS="notebook" pyspark这将打开一个网页,列出我所有的 IPython 笔记本。我可以选择其中一个,在第二个网页中打开它。SparkContext (sc) 已经可用,我在笔记本中的第一个命令是help(sc),它运行良好。我遇到的问题是我收到了一个我不知道如何解决的 Java 堆空间错误。如何查看我当前的 Java 堆设置,以及如何在我的设置上下文中增加它。我收到的错误消息如下:

Py4JJavaError: An error occurred while calling z:org.apache.spark.api.python.PythonRDD.collectAndServe.
: org.apache.spark.SparkException: Job aborted due to stage failure: Task 19 in stage 247.0 failed 1 times, most recent failure: Lost task 19.0 in stage 247.0 (TID 953, localhost): java.lang.OutOfMemoryError: Java heap space
3个回答

您可以通过编程方式(通过 API)管理 Spark 内存限制。

由于 SparkContext 已经在您的笔记本中可用:

sc._conf.get('spark.driver.memory')

您也可以设置,但您必须先关闭现有的 SparkContext:

conf = SparkConf().setAppName("App")
conf = (conf.setMaster('local[*]')
        .set('spark.executor.memory', '4G')
        .set('spark.driver.memory', '45G')
        .set('spark.driver.maxResultSize', '10G'))
sc = SparkContext(conf=conf)

如果所有分析的工作量都相同,那么按照上面引用的方式编辑spark-defaults.conf是可行的方法。

我通过在其中创建一个spark-defaults.conf文件apache-spark/1.5.1/libexec/conf/并向其中添加以下行来解决它: spark.driver.memory 14g

这解决了我的问题。但后来我遇到了另一个问题exceeding max result size of 1024MB解决方案是在上面的文件中添加另一行: spark.driver.maxResultSize 2g

只需config在设置 SparkSession 时使用该选项(从 2.4 开始)

MAX_MEMORY = "5g"

spark = SparkSession \
    .builder \
    .appName("Foo") \
    .config("spark.executor.memory", MAX_MEMORY) \
    .config("spark.driver.memory", MAX_MEMORY) \
    .getOrCreate()