开发者社区 问答 正文

Spark中的OOM问题有哪些?

Spark中的OOM问题有哪些?

展开
收起
芯在这 2021-12-11 22:23:10 617 分享 版权
1 条回答
写回答
取消 提交回答
  • 1、map类型的算子执行中内存溢出如flatMap,mapPatitions

    (1)原因:map端过程产生大量对象导致内存溢出:这种溢出的原因是在单个map中产生了大量的对象导致的针对这种问题。

    (2)解决方案:

    1)增加堆内内存。

    2)在不增加内存的情况下,可以减少每个Task处理数据量,使每个Task产生大量的对象时,Executor的内存也能够装得下。具体做法可以在会产生大量对象的map操作之前调用repartition方法,分区成更小的块传入map。

    2、shuffle后内存溢出如join,reduceByKey,repartition。

    shuffle内存溢出的情况可以说都是shuffle后,单个文件过大导致的。在shuffle的使用,需要传入一个partitioner,大部分Spark中的shuffle操作,默认的partitioner都是HashPatitioner,默认值是父RDD中最大的分区数.这个参数spark.default.parallelism只对HashPartitioner有效.如果是别的partitioner导致的shuffle内存溢出就需要重写partitioner代码了.

    3、driver内存溢出

    (1)用户在Dirver端口生成大对象,比如创建了一个大的集合数据结构。解决方案:将大对象转换成Executor端加载,比如调用sc.textfile或者评估大对象占用的内存,增加dirver端的内存

    (2)从Executor端收集数据(collect)回Dirver端,建议将driver端对collect回来的数据所作的操作,转换成executor端rdd操作。

    2021-12-11 22:23:34
    赞同 展开评论
问答分类:
问答标签:
问答地址: