美文网首页spark学习
Spark OutOfMemoryError解决方案

Spark OutOfMemoryError解决方案

作者: mumu_cola | 来源:发表于2019-04-12 17:08 被阅读0次

    最近遇到一些数据分析校验的工作,初识spark。之前一直可以正常跑的程序最近常常出现OutOfMemoryError错误。

    初步分析:

    • 打开出现错误的任务,查看出错时的堆栈信息。我的错误发生在reduce后collectAsList时候内存溢出了。

    解决思路:

    1. 给spark-submit提交命令添加打印log参数
      --conf "spark.executor.extraJavaOptions=-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=\tmp\dumpex" --conf "spark.driver.extraJavaOptions=-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=\tmp\dumpdr"
      这样下一次运行出现OutOfMemoryError的时候会将executor和driver的堆栈使用情况dump出来。
    2. 使用Memory Analyzer 工具对dump出来的堆栈内存进行分析,下载地址https://www.eclipse.org/mat/
    3. 分析dump文件发现堆栈使用正常。登陆spark UI界面,进入Executors页面,查看driver和各个executor内存分配及使用情况。
    4. 发现driver的memory分配为512M,检查spark-submit提交命令和代码中均没有对driver进行内存分配,所以使用spark提供的默认值。
    5. 查资料,collectAsList操作会在driver上进行,由于本次collectAsList数据量较大,所以driver的内存溢出了。
    6. 给spark-submit提交命令添加driver内存分配参数--driver-memory 6g ,再次验证,问题解决。

    参考资料

    相关文章

      网友评论

        本文标题:Spark OutOfMemoryError解决方案

        本文链接:https://www.haomeiwen.com/subject/ekncwqtx.html