Spark的OOM问题分析与解决
发布时间
阅读量:
阅读量
目录
- 堆内存OOM
-
- Driver heap
- Executor heap
-
堆外内存OOM
-
在Spark系统中,出现OOM(Out Of Memory)的问题主要表现为以下两类情形:
- map操作期间发生内存溢出:该类溢出涵盖了所有与map相关的处理过程,例如flatMap、filter以及mapPartitions等操作。
- shuffle阶段后发生内存溢出:涉及此类溢出的shuffle操作包括join、reduceByKey以及repartition等。
关于内存溢出的应对策略:
1. map阶段生成大量对象引发的内存溢出:
造成该问题的根本原因是在单个map任务中生成了过多的对象。为应对这一情况,在不增加系统内存的前提下,可以通过缩小每个Task的规模,从而确保即使每个Task生成大量对象,Executor的可用内存仍能容纳这些数据。具体实施方法是在可能产生大量对象的map操作之前调用repartition方法,将数据划分为更小的数据块再进行后续处理。需要注意的是,在解决此类问题时不宜使用rdd.coalesce方法,因为该方法仅能减少分区数量而无法增加分区,并且不会触发shuffle过程。
2. 数据分布不均引发的内存溢出:Spark数据倾斜解决方案
全部评论 (0)
还没有任何评论哟~
