在 K8S 部署一个 Spark History Server - 篇3

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。

image_1dj5ru3hm1c681ruci5n1k88muv19.png-53.5kB

3 Summary

在 K8S 集群部署 HS 其实本质上跟部署其他 Web 服务是没什么区别的,好处是 K8S 提供了更好的 Scalling 方法,也更容易运维。

到这里,本系列就讲完了,如果有任何问题,欢迎在本文下面提问,或者发邮件到 runzhliu@163.com

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要在Kubernetes (K8s) 上部署 Canal Server,你可以使用 Deployment 和 Service 来创建和管理它。 首先,你需要创建一个 Canal Server 的配置文件,例如 `canal-server.yaml`,其内容类似于以下示例: ```yaml apiVersion: apps/v1 kind: Deployment metadata: name: canal-server spec: replicas: 1 selector: matchLabels: app: canal-server template: metadata: labels: app: canal-server spec: containers: - name: canal-server image: canal/canal-server:v1.1.4 ports: - containerPort: 11111 env: - name: canal.destinations value: example --- apiVersion: v1 kind: Service metadata: name: canal-server spec: selector: app: canal-server ports: - port: 11111 targetPort: 11111 ``` 上述配置文件定义了一个名为 `canal-server` 的 Deployment 和一个名为 `canal-server` 的 Service。Deployment 中的容器使用 `canal/canal-server:v1.1.4` 镜像,并将容器的端口设置为 11111。Service 将流量转发到 Pod 的容器端口 11111。 执行以下命令来部署 Canal Server: ```shell kubectl apply -f canal-server.yaml ``` 这将创建一个名为 `canal-server` 的 Deployment 和一个名为 `canal-server` 的 Service。 你可以使用以下命令来检查 Deployment 和 Service 的状态: ```shell kubectl get deployments kubectl get services ``` 一旦 Deployment 和 Service 创建成功,你就可以通过 Service 的 Cluster IP 或 NodePort 来访问 Canal Server。 请注意,上述示例仅供参考,你需要根据自己的实际需求进行修改和调整。另外,还需要确保你的 Kubernetes 集群已正确配置,并且能够拉取指定的 Canal Server 镜像
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值