Pyspark记忆问题

时间:2017-10-11 23:36:14

标签: apache-spark amazon-ec2 pyspark

我正在运行一个涉及多次火花并行化的程序。该程序在前几次迭代中运行正常但由于内存问题而崩溃。我使用Spark 2.2.0和Python 2.7,我在AWS EC2上运行我的测试,内存为30g。

以下是我的火花设置:

SELECT CAST(StartTime AS DATETIME) AS StartTime, CAST(endtime AS DATETIME) AS EndTime
FROM BIORADFM_TASK_AUDIT
WHERE CAST(StartTime AS DATETIME) BETWEEN DATEADD(minute,-10,GETDATE()) AND GETDATE()

这是我的错误日志:

conf = pyspark.SparkConf()
conf.set("spark.executor.memory", '4g')
conf.set('spark.executor.cores', '16')
conf.set('spark.cores.max', '16')
conf.set("spark.driver.memory",'4g')
conf.setMaster("local[*]") 

1 个答案:

答案 0 :(得分:2)

让我们解释一下PySpark的工作原理。

对每个worker使用16个内核的pyspark,您要求Spark为每个JVM worker并行启动16个Python实例。您可以在下图中看到:

enter image description here

所以根据我可以在这里查看你的配置,你要求每个4Gb的工作者,每个人将运行16个核心。所以这将创建一个带有1个JVM的结构,它将创建16个管道,以及16个并行运行的python实例。您遇到的这个错误是没有足够的内存供Python运行。

也许你需要减少每个工作者的核心数量,它可以处理这个过程,或者你可以添加更多的内存。

有关详细信息,请查看here