前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【Spark Operator】核数设置Cores/Cores Limit/Cores Request,你搞清楚没有?

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

原创
作者头像
runzhliu
修改2020-07-21 10:18:12
1.5K0
修改2020-07-21 10:18:12
举报
文章被收录于专栏:容器计算容器计算

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

代码语言:javascript
复制
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
此图为k8s模式的request/limit.cores
此图是spark的通用配置core
此图是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 方法会把 core 设置为默认1
就是这个 default 方法会把 core 设置为默认1

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

关于填 spark.driver.coresspark.kubernetes.driver.request/limit.cores,还可以通过 SparkUI 的 Enviroment Tab 去确认,到底设置对了没有,另外,还可以通过 task 的并行度来查看,比如说 Executor 申请了4个核,如果发现并行度只有1,也就是所有 task 是串行执行的,就有必要检查一下 spark.executor.cores 的设置了。

在这里插入图片描述
在这里插入图片描述
串行的 task
串行的 task
这才是真正的并行
这才是真正的并行

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

在这里插入图片描述
在这里插入图片描述

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

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

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档