我正在运行一个涉及多次火花并行化的程序。该程序在前几次迭代中运行正常但由于内存问题而崩溃。我使用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[*]")
答案 0 :(得分:2)
让我们解释一下PySpark的工作原理。
对每个worker使用16个内核的pyspark,您要求Spark为每个JVM worker并行启动16个Python实例。您可以在下图中看到:
所以根据我可以在这里查看你的配置,你要求每个4Gb的工作者,每个人将运行16个核心。所以这将创建一个带有1个JVM的结构,它将创建16个管道,以及16个并行运行的python实例。您遇到的这个错误是没有足够的内存供Python运行。
也许你需要减少每个工作者的核心数量,它可以处理这个过程,或者你可以添加更多的内存。
有关详细信息,请查看here。