绑定完请刷新页面
取消
刷新

分享好友

×
取消 复制
Spark Operator Cores的设置你搞清楚没有?
2023-07-04 17:56:43

我们先看下 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

如果看 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 的设置了。


如果这几个 core 的参数没有设置正确,大的问题就是资源 cpu 利用率了,容器申请了 4 个核,实际上只用到了1个核o(╯□╰)o。像下图这样的利用率才是正常的。

分享好友

分享这个小栈给你的朋友们,一起进步吧。

Spark SQL
创建时间:2022-04-11 10:32:39
Spark SQL
展开
订阅须知

• 所有用户可根据关注领域订阅专区或所有专区

• 付费订阅:虚拟交易,一经交易不退款;若特殊情况,可3日内客服咨询

• 专区发布评论属默认订阅所评论专区(除付费小栈外)

技术专家

查看更多
  • 飘絮絮絮丶
    专家
戳我,来吐槽~