History Server -> HS
1 Overview
因为这个系列的主要是想讲怎么在 K8S 上运行 HS,所以篇3讲述的就是这个,假设你已经有一个 K8S 集群,一个 build 好的 image,本文只是将 HS 运行在 K8S 上,关于日志和其他配置的佳实践,本文不提供参考。
2 部署
要将 HS 部署在 K8S 集群里,需要一个 K8S 集群(Mac 用户可以用 Docker for Mac 或者 Minikube 来安装一个 K8S 集群),另外还有一个 build 好的 HS 镜像。
正如篇2说过的,Spark 提供了一个官方的 Dockerfile,安装官网文档直接 build 就可以了。
HS 可以说是一个无状态的应用,用 K8S 来部署再合适不过了。
具体而且合理的部署方案可以是部署一个 Deployment 作为 HS 的后端,再部署一个 Service 来做负载均衡。
需要知道启动 HS,还有一些配置需要调整,比如说如果需要从 HDFS 读取 Application 的作业信息的话,显然还需要配置读取的路径,否则就会从本地的默认 /tmp/spark-events
目录读取,然后还有端口之类的信息。
关于详细的配置方案,建议参考官方文档。
apiVersion: apps/v1
kind: Deployment
metadata:
name: spark-history-server
spec:
selector:
matchLabels:
run: spark-history-server
replicas: 2
template:
metadata:
labels:
run: spark-history-server
spec:
containers:
- image: hub.oa.com/runzhliu/spark:spark_2.11-2.4.3
name: spark-history-server
args: ["/opt/spark/bin/spark-class", "org.apache.spark.deploy.history.HistoryServer"]
ports:
- containerPort: 18080
name: http
env:
- name: SPARK_HISTORY_OPTS
value: "-Dspark.history.fs.logDirectory=file:///tmp"
然后通过下面的命令,创建一个 Service,来对 Deployment 做负载均衡,并且通过 NodePort 方式,可以访问到这两个 Pod。
kubectl expose Deployment spark-history-server --type=NodePort --name=spark-history-server
然后看看 Service 分配了哪个端口。确定是 30984。
# kubectl get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
spark-history-server NodePort 10.98.209.80 <none> 18080:30984/TCP 3m29s
后访问 HS。
3 Summary
在 K8S 集群部署 HS 其实本质上跟部署其他 Web 服务是没什么区别的,好处是 K8S 提供了更好的 Scalling 方法,也更容易运维。
到这里,本系列就讲完了,如果有任何问题,欢迎在本文下面提问,或者发邮件到 runzhliu@163.com。