【Spark Operator】核数设置Cores/Cores Limit/Cores Request,你搞清楚没有?

我们先看下 Spark 3.0 官方文档,关于几个 Core 的参数的解读。

spark.driver.cores
spark.kubernetes.driver.request.cores
spark.kubernetes.driver.limit.cores
spark.executor.cores
spark.kubernetes.executor.request.cores
spark.kubernetes.executor.limit.cores

此图为k8s模式的request/limit.cores
此图是spark的通用配置core

如果看 on k8s 部分的源码,你会发现 spark.kubernetes.driver.request.cores 没有设置,spark.driver.cores 是会作为其替补值注入的。所以最重要的参数是 spark.driver.coresspark.kubernetes.driver.limit.cores
在这里插入图片描述
但是如果你 spark.kubernetes.driver.request.cores=4 也填了,spark.driver.cores=1 也填了,那么实际上这个 Driver Pod 和 Driver 进程分别是见到几个 core 呢?
笔者测试过,如果安装上述方式填入的话,Driver Pod 的 Driver 容器依然是以4个 cores 的资源量创建的,不信可以进入容器 ls /proc/cpuinfo 查看一下。但是 Driver 进程其实只会认为只有1个 core,原因很简单,这个 spark.driver.core 跟 on Yarn/Standalone/Local 模式是一样的,那些集群模式都没有 spark.kubernetes.driver.request.cores 这些参数,所以当然也只看 spark.driver.cores 了,给 Driver 进程分配的核数就只有1个,当然了,Executor 的 Cores 参数也是一样的。
需要提醒的是,Spark Operator,也需要填好几个 Core 的参数,而且这是在 CRD 的 Validation 有做校验的。所以正常安装 Spark Operator,至少是需要填 corescoreLimit 的,但是如果 core 没填,Validation 是会给加个默认的最小值1的,所以这里一定要注意,不要以为 Spark Application 填了 coreLimitcoreRequets 就够了,如果 core 没填,会给塞一个 spark.driver.cores=1 进去 SparkConf 的。
就是这个default方法
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
关于填 spark.driver.coresspark.kubernetes.driver.request/limit.cores,还可以通过 SparkUI 的 Enviroment Tab 去确认,到底设置对了没有,另外,还可以通过 task 的并行度来查看,比如说 Executor 申请了4个核,如果发现并行度只有1,也就是所有 task 是串行执行的,就有必要检查一下 spark.executor.cores 的设置了。
在这里插入图片描述
串行的 task
这才是真正的并行
如果这几个 core 的参数没有设置正确,最大的问题就是资源 cpu 利用率了,容器申请了 4 个核,实际上只用到了1个核o(╯□╰)o。像下图这样的利用率才是正常的。
在这里插入图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值