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部分

 

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐