執行如下代碼時報錯
# 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