Spark History Server(SHS)是一个无状态服务,只要eventlog没有丢失,SHS重启或者切换是不会受到影响的。当然当我们开启了SHS的磁盘缓存的时候,如果SHS换了node启动,缓存可能就会丢失,但是SHS可以根据eventlog重新生成缓存,因此我们可以认为他是一个无状态服务。这样的服务在K8s上可以很容易的进行部署,本文将介绍如何把SHS部署到8s上,分享一下可能遇到的问题。
SHS image准备Spark暂时还没有提供官方的spark docker image,所以我们需要自己准备好这个image。不过官方有提供build image的脚本,所以自己做image还是很方便的。
spark code downloadgit clone https://github.com/apache/spark.git
build spark with K8s./build/mvn -Pkubernetes -DskipTests clean package
build docker imagespark提供了bin/docker-image-tool.sh这个脚本,可以直接用它来构建你的image,这个image不仅仅可以用来跑SHS也可以用来跑spark job,但是这个是非常基础的image,如果你有一些定制需求,可以尝试修改这个脚本。比如需要有default config,例如你可以再spark repo下创建一个特定的conf文件夹,里面可以包含一些配置文件,例如spark-default.conf,然后修改docker-image-tool.sh和Dockerfile脚本,这样才能保证你的image里有你的这个文件夹。
docker-image-tool.sh
cp -r "conf" "$base_CTX/conf"
Dockerfile
COPY conf /opt/spark/conf
选择以下命令制作docker image:
$ ./bin/docker-image-tool.sh -r
参考Spark官网中 Docker Images
部署SHS到k8s 准备一个yaml文件, kubectl apply -f shs.yaml
这里给到的是一个非常基本的一个deployment,重点关注下args这个参数,这里就是我们启动spark hitory server的命令。
apiVersion: apps/v1kind: Deploymentmetadata: name: shs-v1 namespace: defaultspec: selector: matchLabels: run: shs-v1 replicas: 2 template: metadata: labels: run: shs-v1 spec: containers: - image:
你可以创造一个service或者利用kube proxy来访问这个SHS。
kubectl expose deployment shs-v1 -n default --type=ClusterIP --name=shs-v1-svc
常见问题 could not find spark-version-info.properties
可以手动创建一个空的spark-version-info.properties文件,把它放到如下位置:
…coresrcmainresourcesspark-version-info.properties
如果你是在windows环境对spark进行build,你可能需要用到:
dos to unix命令,来转换一些.sh文件
如果spark.history.fs.logDirectory没有进行配置,就会使用默认值,/tmp/spark-events
记得在Dockerfile里进行创建
mkdir -p /tmp/spark-events &&