spark 基于minikube部署cluster模式

前提条件

spark的版本需要在2.3及以上的版本

k8s的版本需要在1.6以上

serviceaccount需要有创建pod,service,configmap的权限

集群中需要有k8s dns

由于是在自己的电脑上,所以采用的是minikube来部署,minikube的安装,可以参考minikube官网

启动minikube及准备

minikub在启动时需要3 cpus和4g以上的资源,在启动前,如果minikube已经存在了,先删除原有的集群

  minikube delete

在启动minikube时可采用

   minikube start --cpus 3 --memory 4g  --image-mirror-country='cn' --kubernetes-version=v1.23.6  

或者通过

 minikube config set cpus 3
 minikube config set memory 4g
 minikube start --image-mirror-country='cn' --kubernetes-version=v1.23.6

启动时参数解释:

cpus和memory:指定cpu个数,memory 指定内存大小,默认为gb

image-mirror-country:针对在国内的环境,加快minikube下载相应的镜像速度,如果不加,可能会启动的比较慢

kubernetes-version: 当k8s的版本大于24时,minikube 启动失败,原因暂时还未弄清楚。

创建命名空间

 kubectl create namespace spark

创建serviceaccount并赋予权限

kubectl create serviceaccount spark-serviceaccount --namespace spark
kubectl create clusterrolebinding spark-rolebinding --clusterrole=edit --serviceaccount=spark:spark-serviceaccount --namespace=spark

打包spark镜像

spark下载地址:https://spark.apache.org/downloads.html ,下载相应平台的spark,写本文档时的环境为ubuntu 20.04版本,spark版本3.1.3 hadoop版本3.2。将下载下来的文件解压,进入目录中,先执行如下命令:

 eval $(minikube docker-env)
 docker build -t   test/spark:3.1.3  -f  kubernetes/dockerfiles/spark/Dockerfile .

打包时的注意事项:

在打包前一定要执行eval $(minikube docker-env),否则后面在提交时,找不到镜像。

在打包前,自己写的spark jar包需要一起打到该镜像中,否则后面提交时,找不到jar包(可能有其他的方法,但暂时未找到)

打包的时候,最后面的点号一定要加,否则有可能报错

提交spark任务

  ./bin/spark-submit \
    --master k8s://https://xxx.xxx.xx.xx:8443 \
    --deploy-mode cluster \
    --name spark-pi \
    --class   mainClasss \
    --conf  spark.executor.instances=1 \
    --conf spark.kubernetes.driver.volumes.hostPath.driverv.options.path=/tmp/spark-minikube-demo \
    --conf spark.kubernetes.driver.volumes.hostPath.driverv.mount.path=/tmp/spark/k8s-demo \
    --conf spark.kubernetes.executor.volumes.hostPath.driverv.options.path=/tmp/spark-minikube-demo \
    --conf spark.kubernetes.executor.volumes.hostPath.driverv.mount.path=/tmp/spark-minikube-demo \
    --conf spark.kubernetes.authenticate.driver.serviceAccountName=spark-serviceaccount\
    --conf spark.kubernetes.container.image.pullPolicy=Never \
    --conf spark.kubernetes.namespace=spark \
    --conf spark.kubernetes.container.image=registry.cn-hangzhou.aliyuncs.com/spark:3.1.3 \
    local:///opt/spark/jars/sparkDemo.jar

参数解释:

master: k8s地址,可以执行下面命令获取

kubectl cluster-info

spark.kubernets.driver/executor.volumes.[]volumType].[volumName].options/mount:挂载卷信息

spark.kubernetes.container.image.pullPolicy:获取镜像的方式,Never指的是从本地仓库获取,如果是Always指的是从远程仓库获取。

local:///file:指的是spark jar包在镜像内的位置,在测试中,我的jar包是打在了/opt/spark/jars这个目录下

排错

如果在启动的过程中,遇到执行出错,执行如下命令

kubectl get pods --namespace=spark

找到报错的podid

kubectl logs podId  --namespace=spark

查看输出的日志信息,定位问题

参考文章

1、https://blog.csdn.net/john1337/article/details/110261723

2、https://spark.apache.org/docs/latest/running-on-kubernetes.html

你可能感兴趣的:(云原生,spark,大数据,kubernetes)