欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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

程序员文章站 2024-03-18 10:17:46
...

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

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

如果看 on k8s 部分的源码,你会发现 spark.kubernetes.driver.request.cores 没有设置,spark.driver.cores 是会作为其替补值注入的。所以最重要的参数是 spark.driver.coresspark.kubernetes.driver.limit.cores
【Spark Operator】核数设置Cores/Cores Limit/Cores Request,你搞清楚没有?
但是如果你 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 的。
【Spark Operator】核数设置Cores/Cores Limit/Cores Request,你搞清楚没有?
【Spark Operator】核数设置Cores/Cores Limit/Cores Request,你搞清楚没有?
【Spark Operator】核数设置Cores/Cores Limit/Cores Request,你搞清楚没有?
关于填 spark.driver.coresspark.kubernetes.driver.request/limit.cores,还可以通过 SparkUI 的 Enviroment Tab 去确认,到底设置对了没有,另外,还可以通过 task 的并行度来查看,比如说 Executor 申请了4个核,如果发现并行度只有1,也就是所有 task 是串行执行的,就有必要检查一下 spark.executor.cores 的设置了。
【Spark Operator】核数设置Cores/Cores Limit/Cores Request,你搞清楚没有?
【Spark Operator】核数设置Cores/Cores Limit/Cores Request,你搞清楚没有?
【Spark Operator】核数设置Cores/Cores Limit/Cores Request,你搞清楚没有?
如果这几个 core 的参数没有设置正确,最大的问题就是资源 cpu 利用率了,容器申请了 4 个核,实际上只用到了1个核o(╯□╰)o。像下图这样的利用率才是正常的。
【Spark Operator】核数设置Cores/Cores Limit/Cores Request,你搞清楚没有?

相关标签: Kubernetes Spark