文档首页 > > 开发指南(适用于2.x及之前)> Spark应用开发> 调优程序> Spark Core调优> 配置内存

配置内存

分享
更新时间:2020/07/22 GMT+08:00

操作场景

Spark是内存计算框架,计算过程中内存不够对Spark的执行效率影响很大。可以通过监控GC(Garbage Collection),评估内存中RDD的大小来判断内存是否变成性能瓶颈,并根据情况优化。

监控节点进程的GC情况(在客户端的conf/spark-defaults.conf配置文件中,在spark.driver.extraJavaOptions和spark.executor.extraJavaOptions配置项中添加参数:"-verbose:gc -XX:+PrintGCDetails -XX:+PrintGCTimeStamps"

),如果频繁出现Full GC,需要优化GC。把RDD做Cache操作,通过日志查看RDD在内存中的大小,如果数据太大,需要改变RDD的存储级别来优化。

操作步骤

  • 优化GC,调整老年代和新生代的大小和比例。在客户端的conf/spark-defaults.conf配置文件中,在spark.driver.extraJavaOptions和spark.executor.extraJavaOptions配置项中添加参数:-XX:NewRatio。如," -XX:NewRatio=2",则新生代占整个堆空间的1/3,老年代占2/3。
  • 开发Spark应用程序时,优化RDD的数据结构。
    • 使用原始类型数组替代集合类,如可使用fastutil库。
    • 避免嵌套结构。
    • Key尽量不要使用String。
  • 开发Spark应用程序时,建议序列化RDD。

    RDD做cache时默认是不序列化数据的,可以通过设置存储级别来序列化RDD减小内存。例如:

    testRDD.persist(StorageLevel.MEMORY_ONLY_SER)
分享:

    相关文档

    相关产品

文档是否有解决您的问题?

提交成功!非常感谢您的反馈,我们会继续努力做到更好!
反馈提交失败,请稍后再试!

*必选

请至少选择或填写一项反馈信息

字符长度不能超过200

提交反馈 取消

如您有其它疑问,您也可以通过华为云社区问答频道来与我们联系探讨

智能客服提问云社区提问