您现在的位置是:首页 >其他 >spark on k8s 部署的一点理解网站首页其他
spark on k8s 部署的一点理解
Running Spark on Kubernetes - Spark 3.4.0 Documentation (apache.org)
前提条件
1. 本地有spark安装包,以便于执行 spark submit 命令
2. k8s 集群,以及本地的有 kubectl 并且配置的用户包含相关权限,具体可以参考官网
一些观念的转变
spark on k8s 并不会启动一个常驻的集群,而是再 submit 提交任务时启动对应的pod作为driver 和 executor,任务结束后,这些pod 都会被释放
./bin/spark-submit
--master k8s://https://<k8s-apiserver-host>:<k8s-apiserver-port>
--deploy-mode cluster
--name spark-pi
--class org.apache.spark.examples.SparkPi
--conf spark.executor.instances=5
--conf spark.kubernetes.container.image=<spark-image>
local:///path/to/examples.jar
上面是官网上提供的启动示例,主要分为几步
1. 调用本地的 spark-submit 命令
2. spark-submit 进程请求 k8s API 创建dirver pod (使用本地的 ~/.kubi/config 获取权限)
3. driver pod 创建 executor pod 作为执行器来执行任务
4. 任务结束后pod会完成,释放资源,所以没有任务的时候不会占用资源
5. 实时任务则一直执行
关于spark配置
使用spark难免会需要一些 hdfs 、hive-metastore 等配置、xml 等,把这些配置打到镜像里显然可以,但很不灵活。
本地spark-submit 进程 创建pod时会将本地的spark配置作为configMap挂在到pod中
所以只要维护好本地提交的spark环境即可,
可以先通过 kubectl describe pod ** 来找到对相应的configMap
然后 通过 kubectl describe configmap 来确认配置
关于权限
本地提交是使用的用户权限,来自 ~/.kube/config
提交后driver后,driver 需要创建pod的权限,这里可以使用的是 serviceAccout 的权限,创建权限以及如何指定serviceAccount 参考 官网RBAC部分