spark学习

Spark OutOfMemoryError解决方案

2019-04-12  本文已影响0人  mumu_cola

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

初步分析:

解决思路:

  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 ,再次验证,问题解决。

参考资料

上一篇下一篇

猜你喜欢

热点阅读