diff --git a/README.md b/README.md index 77a1080..8bef418 100644 --- a/README.md +++ b/README.md @@ -497,3 +497,24 @@ Spark中,堆内存,又被划分成为两部分,一块是专门用来给RDD cache操作的内存占比,大不了用persist操作,选择将缓存的数据写入磁盘,配合序列化方式,减少算子缓存内存占比。 一句话,让task执行算子函数有更多的内存可以是使用。可以使用参数spark.storage.memoryFraction进行调节,默认是0.6。 + +## JVM调优之调节executor堆外内存之连接等待时长 +有时候,如果你的spark作业处理的数据量特别大的几亿数据量,然后作业一运行,时不时的保存,shuffle file cannot find,task lost ,oom。 + +可以说你的executor的堆外内存不足够,导致executor在运行的过程中,可能会内存溢出,然后导致后续的stage的task在运行的时候,可能要从一些 + +executor中拉去shuffle map output文件,但是executor可能会挂掉,关联的block manager也没有了,可能会报shuffle output not found + +等spark作业会彻底崩溃。 + +上述情况,可以考虑调节executor的堆外内存占比此外,有时堆外内存调节的比较的时候,对于性能的提升会有一定的提升。 + +如何调节? + +在spark-submit的脚本中,去用--conf的方式,去添加配置。 + +spark.yarn.executor.memoryOverhead参数,针对的的是yarn的提交方式。 + +通过这个参数调节以后,可以避免以上问题的避免。 + +对于等待时间,就是在出现上述错误的时候,连接不上拉去数据的Block Manager,就会出现这个问题,我们需要在spark-submit脚本中配置等待时长,默认是60秒。