当我们提交一个Spark作业到YARN上,图解通常情况下会使用如下的资源脚本模板:
- spark-submit
- --class class-name
- --master yarn
- --deploy-mode cluster
- --driver-memory 4g
- --num-executors 2
- --executor-memory 2g
- --executor-cores 2
具体参数的含义如下图所示:
每个executor的最大核数
每个node的executor数 = 总核数 / 每个executor的最大cup核数,具体是分配通过参数
yarn.nodemanager.resource.cpu-vcores进行配置,比如该值配置为:33,图解参数executor-cores的资源值为:5,那么每个node的分配executor数 = (33 - 1[操作系统预留])/ 5 = 6,假设集群节点为10,那么num-executors = 6 * 10 =60
该参数的图解值依赖于:yarn-nodemanager.reaource.memory-mb,该参数限定了每个节点的container的最大内存值。
该参数的值=yarn-nodemanager.reaource.memory-mb / 每个节点的executor数量 ,如果yarn的参数配置为160,那么
yarn-nodemanager.reaource.memory-mb / 每个节点的executor数量 = 160 / 6 ≈ 26GB
Spark2.X的内存管理模型如下图所示:
Spark中的内存使用大致包括两种类型:执行和存储。
执行内存是指用于用于shuffle、join、排序、聚合等计算的内存
存储内存是指用于在集群中持久化和广播内部数据的内存。
在Spark中,执行内存和存储内存共享一个统一的区域。当没有使用执行内存时,存储内存可以获取所有可用内存,反之亦然。如有必要,执行内存可以占用存储存储,但仅限于总存储内存使用量低于某个阈值。
该设计确保了几种理想的特性。首先,不使用缓存的应用程序可以使用整个空间执行,从而避免不必要的磁盘溢出。其次,使用缓存的应用程序可以保留最小存储空间。最后,这种方法为各种工作负载提供了合理的开箱即用性能,而无需用户内部划分内存的专业知识。
虽然有两种相关配置,但一般情况下不需要调整它们,因为默认值适用于大多数工作负载:
spark.memory.fraction默认大小为(JVM堆内存 - 300MB)的一小部分(默认值为0.6)。剩下的空间(40%)保留用于用户数据结构,Spark中的内部元数据,以及在稀疏和异常大的记录的情况下防止OOM错误。spark.memory.storageFraction默认大小为(JVM堆内存 - 300MB)0.60.5。
责任编辑:武晓燕 来源: 大数据技术与数仓 Spark资源分配(责任编辑:知识)
东方国信(300166.SZ)公布消息:拟使用节余募集资金永久补充流动资金
目前国内90%以上的芯片设计公司都不赚钱,但五年后中国集成电路就稳了
汇医慧影携手英特尔,发布全球首个乳腺癌AI全周期健康管理系统
阳普医疗(300030.SZ)公布消息:赵吉庆已于3月17日
腾讯音乐正式递交赴美上市招股书,IPO 前腾讯持股占比 58.1%
专访创新奇智CTO张发恩:下一个巨头将诞生在AI+B2B领域
中盈盛达融资担保(01543.HK)完成发行2.60亿元公司债 票面利率为4.60%
微信公众号再次调整可注册数量:个人可注册 1 个,企业最多 2 个