控制reduce端缓冲大小避免OOM
shuffle reader的读取缓冲48M,内存不大时,不宜调整太大。
JVM GC导致的shuffle文件拉取失败
适当延长ack连接等待时长
提高shuffle重试最大次数
适当延长重试间隔
各种序列化导致的报错
RDD自定义类型,必须可以序列化
算子函数使用的外部自定义变量,也要序列化
不可以在RDD的元素类型、算子函数中使用第三方不支持序列化的类型,比如Connection
算子函数返回NULL导致的问题
替换为业务上没有意义的数据 比如-1
进行过滤
Yarn-client模式导致的网卡流量激增问题

driver在本地,当task比较多时,需要和executor通信,流量会激增。
线上使用cluster模式
Yarn-cluster模式的JVM占内存溢出无法执行

当永久代PermGen占用超过82M,小于128M,可以调整JVM参数
--conf spark.driver.extraJavaOptions="--XX:PermSize=128M --XX:MaxPermSize=256M"
SparkSQL导致的JVM栈内存溢出

持久化与checkpoint的使用
cache+checkpoint联合使用
内存泄漏排查
工具
IBM HeapAnalyzer
频繁GC
1、打印GC详情

如果多次full gc,首先考虑executor内存设置少了,增加ExecutorMemory。
2、如果任务结束前,full gc多次,说明老年代占满了。

3、如果有很多minor gc,但是full gc不多,可以给eden分配更多资源

4、调整gc回收器,通常使用G1.-XX:+UseG1GC。当execuotr的堆空间比较大时,可以提升G1 region size(-XX:G1HeapRegionSize)

本文探讨了如何通过调整shufflereader缓冲、JVM参数、序列化规则、RDD设计和内存管理来避免内存溢出,包括减少shuffle端缓冲大小、优化GC行为、序列化要求以及持久化策略。还提到了Yarn-client模式下的网络流量问题和内存配置建议。
412

被折叠的 条评论
为什么被折叠?



