zoukankan      html  css  js  c++  java
  • 【已解决】 IDEA运行spark程序报错:GC overhead limit exceeded?

    1. 问题描述

    在运行代码之后,出现以下错误:

    Exception in thread "main" org.apache.spark.SparkException: Job aborted due to stage failure: Task 0 in stage 107.0 failed 1 times, most recent failure: Lost task 0.0 in stage 107.0 (TID 208, localhost, executor driver): java.lang.OutOfMemoryError: GC overhead limit exceeded
    

    经查询之后,是由于JVM花费太长时间执行GC且只能回收很少的堆内存时抛出的
    一般可以通过更改JVM启动配置增加堆大小来解决
    参考:https://blog.csdn.net/github_32521685/article/details/89953796

    2. 解决过程

    1. 增加idea运行或编译内存

    1. file -> settings
    2. 搜索maven,点击importing,修改JVM启动项

    并没有解决问题

    2. 增加spark的executor.memory和driver.memory

    val sparkConf = new SparkConf()......set("spark.executor.memory","6G").set("spark.driver.memory","3G")
    

    也没有起作用

    3. 减小executor.cores

    executor core数量太多,可能会导致了多个core之间争夺gc时间以及资源,但修改为为1仍然报错

    4. 优化代码

    没办法,其他方案都不行,只好试试减少计算
    在需要用的RDD的原始数据集上加.cache(),进行缓存一下,它就不会重复计算,整个的计算的效率会高一些,不会出现内存溢出的问题
    终于,运行成功了

    3. 心得

    写代码的时候,还是要多注意代码的优化!!!

  • 相关阅读:
    js添加和删除class
    GIT回滚master分支到指定tag版本
    table添加正确的样式
    iframe父页面与子页面赋值
    关于日期转换
    vue-cli脚手架安装
    npm手册
    linear-gradient常用实现效果
    【转载】说说JSON和JSONP,也许你会豁然开朗,含jQuery用例
    雷霄骅走了
  • 原文地址:https://www.cnblogs.com/cjq10029/p/12688693.html
Copyright © 2011-2022 走看看