执行如下代码时报错
# encoding:utf-8 from pyspark import SparkConf, SparkContext from pyspark.sql import SparkSession conf = SparkConf().setMaster('yarn') sc = SparkContext(conf=conf) spark = SparkSession(sc) rdd = spark.read.csv('/spark/gps/GPS1.csv') print rdd.count() print rdd.repartition(10000).count() print rdd.repartition(10000).collect() # 报错 spark-OutOfMemory:GC overhead limit exceeded
执行命令
spark-submit --master yarn bigdata.py
报错内容
spark-OutOfMemory:GC overhead limit exceeded
在执行 count 时没什么问题,各种参数影响不大;但是在执行 collect 时,总是报错
原因分析
1. collect 导致数据回传 Driver,致使 Driver 内存溢出
解决方法是增加 Driver 内存
spark-submit --master yarn --executor-cores 4 --driver-memory 3G bigdata.py
2. executor-core 数量太多,导致多个 core 之间争夺 GC 时间以及资源,最后导致大部分时间都花在了 GC 上
解决方法是减少 core 数量
spark-submit --master yarn --executor-cores 1 bigdata.py
参考资料:
https://blog.csdn.net/amghost/article/details/45303315