栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 前沿技术 > 大数据 > 大数据系统

spark on yarn container被kill

spark on yarn container被kill

一个Executor对应一个JVM进程。 从Spark的角度看,Executor占用的内存分为两部分:ExecutorMemory和MemoryOverhead。其中,ExecutorMemory为JVM进程的Java堆区域,MemoryOverhead为JVM进程中除Java堆以外占用的空间大小,包括方法区(永久代)、Java虚拟机栈、本地方法栈、JVM进程本身所用的内存、堆外内存(Direct Memory)等。

spark.driver.memory 和spark.executor.memory 分别设置Spark的Driver和Executor的ExecutorMemory.

spark.yarn.executor.memoryOverhead和spark.yarn.driver.memoryOverhead分别设置Spark的Driver和Executor的MemoryOverhead.

另外,Spark会大量分配堆外内存,堆外内存默认最大可以和ExecutorMemory一样,可以通过javaOptions使用MaxDirectMemorySize配置最大值。

堆外内存最大可以和ExecutorMemory一样,但是堆外内存又受MemoryOverhead限制,所以当MaxDirectMemorySize,ExecutorMemory和MemoryOverhead设置不合理时,会出现container内存超限,被Yarn kill的情况。

比如,ExecutorMemory 为8G,MemoryOverhead为4G,MaxDirectMemorySize没有设置,此时yarn认为一个container最大可以使用12G内存,但是堆外内存最大可以使用8G,导致container最大可以使用超过16G内存(堆内内存+ 堆外内存),比12G大, 最终被Yarn kill掉。

合理的设置规则为: ExecutorMemory + MemoryOverhead > ExecutorMemory + MaxDirectMemorySize

所以,Spark应用占用集群内存的总大小为:

(executor个数) * (SPARK_EXECUTOR_MEMORY+ spark.yarn.executor.memoryOverhead)+(SPARK_DRIVER_MEMORY+spark.yarn.driver.memoryOverhead)

参数调优建议:

每个Executor进程的内存设置4G~8G较为合适。

每个Executor的CPU core数量设置为2~4个较为合适。

作者:这个该叫什么呢
链接:https://www.jianshu.com/p/ceee2d5990f8
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/774559.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号