控制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)