spark oom(out of memory)问题
https://blog.csdn.net/yhb315279058/article/details/51035631
https://www.cnblogs.com/yanshw/p/11988347.html
1 driver内存不够
增加 Driver 内存
1 | --driver-memory MEM Memory for driver (e.g. 1000M, 2G) (Default: 1024M). |
1 读入数据太大
解决思路是增加 Driver 内存
1 | from pyspark import SparkContext |
2 数据回传太大,也就是聚合到driver的数据太大
解决思路是分区输出,具体做法是 foreach
1 | rdd = sc.parallelize(range(100)) |
2 excutor内存不够
通用的解决办法就是增加 Executor 内存 但这并不一定是最好的办法
1 map 过程产生大量对象
解决思路是减少每个 task 的大小,从而减少每个 task 的输出
具体做法是在 会产生大量对象的 map 操作前 添加 repartition(重新分区) 方法,分区成更小的块传入 map
1 | rdd.flatMap(lambda x: ['%d'%x*50 for _ in range(100000000)]).count() # 100 * 100000000 个对象,内存溢出 |
2 shuffle导致
shuffle内存溢出的情况可以说都是shuffle后发生数据倾斜,单个文件过大导致
参考数据倾斜解决方案
spark oom(out of memory)问题
# Related Post
1.spark资源参数调优
2.Use reduceByKey instead of groupByKey
3.持久化
4.Spark 数据倾斜
5.shuffle
6.spark优化
1.spark资源参数调优
2.Use reduceByKey instead of groupByKey
3.持久化
4.Spark 数据倾斜
5.shuffle
6.spark优化