专栏首页容器计算【Spark Operator】核数设置Cores/Cores Limit/Cores Request,你搞清楚没有?
原创

【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

如果看 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 方法会把 core 设置为默认1

关于填 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。像下图这样的利用率才是正常的。

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 【Spark】常见的编译错误

    改动了一下 Spark 的代码,重新编一个,因为有段时间没编了,本地环境可能有点问题,果不其然,报错了,java.lang.ClassNotFoundExcep...

    runzhliu
  • yum install空间不足

    本地要编一个 ceph-exporter,需要 ceph 的相关库,于是在开发机上 yum install librados2-devel,报错了,因为第一次遇...

    runzhliu
  • Flink job cluster on Kubernetes

    之前文章介绍了 Flink session cluster on Kubernetes,需要注意,这种部署方式,可以在同一个 Cluster 上多次提交 Fli...

    runzhliu
  • js导json数据到excel接口

    用户1220053
  • JavaScript的工作原理:解析、抽象语法树(AST)+ 提升编译速度5个技巧

    我们都知道运行一大段 JavaScript 代码性能会变得很糟糕。这段代码不仅需要通过网络传输,而且还需要解析、编译成字节码,最后执行。在之前的文章中,我们讨论...

    Fundebug
  • Java|写一个用迭代法解方程的Java程序

    迭代法也称辗转法,是一种逐次逼近方法,在使用迭代法解方程组时,其系数矩阵在计算过程中始终不变。它利用计算机运算速度快、适合做重复性操作的特点,让计算机对一组指令...

    算法与编程之美
  • go语言调度器源代码情景分析之二:CPU寄存器

    寄存器是CPU内部的存储单元,用于存放从内存读取而来的数据(包括指令)和CPU运算的中间结果,之所以要使用寄存器来临时存放数据而不是直接操作内存,一是因为CPU...

    阿波张
  • 汇编语言 手记5

    段寄存器就是提供段地址的。 8086CPU有4个段寄存器 CS DS SS ES 当8086CPU要访问内存时,由这4个段寄存器提供内存单元的段地址。 CS(代...

    用户1154259
  • mysql共享锁与排他锁

    mysql锁机制分为表级锁和行级锁,本文就和大家分享一下我对mysql中行级锁中的共享锁与排他锁进行分享交流。

    MickyInvQ
  • 最全对比,Daydream明年将全方位吊打Gear VR!

    VRPinea

扫码关注云+社区

领取腾讯云代金券