From be643b7ce7a912df0972ea75589af03d7fcfd70d Mon Sep 17 00:00:00 2001 From: Jimmy Song Date: Sat, 30 Oct 2021 08:15:58 +0800 Subject: [PATCH] update --- SUMMARY.md | 6 ++-- usecases/big-data.md | 35 +------------------ ...-spark-with-kubernetes-native-scheduler.md | 2 ++ usecases/spark-on-kubernetes.md | 27 ++++++++++++++ usecases/spark-standalone-on-kubernetes.md | 28 +++++++-------- 5 files changed, 47 insertions(+), 51 deletions(-) create mode 100644 usecases/spark-on-kubernetes.md diff --git a/SUMMARY.md b/SUMMARY.md index 57fa0e427..5e25d049d 100644 --- a/SUMMARY.md +++ b/SUMMARY.md @@ -246,10 +246,10 @@ * [微服务中的服务发现](usecases/service-discovery-in-microservices.md) * [使用 Java 构建微服务并发布到 Kubernetes 平台](usecases/microservices-for-java-developers.md) * [Spring Boot 快速开始指南](usecases/spring-boot-quick-start-guide.md) - * [大数据](usecases/big-data.md) - * [Spark standalone on Kubernetes](usecases/spark-standalone-on-kubernetes.md) - * [运行支持 Kubernetes 原生调度的 Spark 程序](usecases/running-spark-with-kubernetes-native-scheduler.md) + * [Spark 与 Kubernetes](usecases/spark-on-kubernetes.md) + * [Spark standalone on Kubernetes](usecases/spark-standalone-on-kubernetes.md) + * [运行支持 Kubernetes 原生调度的 Spark 程序](usecases/running-spark-with-kubernetes-native-scheduler.md) * [Serverless 架构](usecases/serverless.md) * [理解 Serverless](usecases/understanding-serverless.md) * [FaaS(函数即服务)](usecases/faas.md) diff --git a/usecases/big-data.md b/usecases/big-data.md index 766128d34..13ffcb6b6 100644 --- a/usecases/big-data.md +++ b/usecases/big-data.md @@ -1,39 +1,6 @@ # 大数据 -Kubernetes community中已经有了一个Big data SIG,大家可以通过这个SIG了解kubernetes结合大数据的应用。 +Kubernetes community 中曾经有了一个Big Data SIG,现为 [Big Data User Group](https://github.com/kubernetes/community/tree/master/ug-big-data),大家可以通过这个用户组了解 Kubernetes 结合大数据的应用。 在Swarm、Mesos、kubernetes这三种流行的容器编排调度架构中,Mesos对于大数据应用支持是最好的,spark原生就是运行在mesos上的,当然也可以容器化运行在kubernetes上。当前在kubernetes上运行大数据应用主要是spark应用。 -## Spark on Kubernetes - -Spark原生支持standalone、mesos和YARN的调度方式,当前kubernetes社区正在支持kubernetes的原生调度来运行spark - 。 - -当然您也可以在kubernetes直接部署spark on yarn或者spark standalone模式,仍然沿用已有的 - -## Spark Standalone - -使用spark standalone模式在kubernetes上运行,kubernetes不负责spark任务的调度。参考:[Spark standalone on Kubernetes](spark-standalone-on-kubernetes.md) - -这种模式中使用的spark本身负责任务调度,kubernetes只是作为一个spark的部署平台。 - -## Spark on Yarn - -使用StatefulSet和Headless serverless来实现。 - -这种模式中kubernetes依然不负责spark应用的调度,而只是将Yarn换了一个部署环境而已。 - -下面是架构图: - -![Spark on yarn with kubernetes](../images/spark-on-yarn-with-kubernetes.png) - -### Spark on Kubernetes - -Spark on kubernetes,使用kubernetes作为调度引擎,spark的任务直接调度到node节点上。参考:[运行支持kubernetes原生调度的Spark程序](running-spark-with-kubernetes-native-scheduler.md)。 - -### 调度方式总结 - -下图显示的是三种调度方式中单个kubernetes node节点上运行的spark相关容器的调度情况。 - -![在kubernetes上使用多种调度方式](../images/spark-on-kubernetes-with-different-schedulers.jpg) - -毫无疑问,使用kubernetes原生调度的spark任务才是最节省资源的。 diff --git a/usecases/running-spark-with-kubernetes-native-scheduler.md b/usecases/running-spark-with-kubernetes-native-scheduler.md index 34ecb04e6..953c74a9b 100644 --- a/usecases/running-spark-with-kubernetes-native-scheduler.md +++ b/usecases/running-spark-with-kubernetes-native-scheduler.md @@ -1,5 +1,7 @@ # 运行支持kubernetes原生调度的Spark程序 +**注:该项目已不推荐使用。** + TL;DR 这个主题比较大,该开源项目也还在不断进行中,我单独做了一个 web 用来记录 spark on kubernetes 的研究和最新进展见: https://jimmysong.io/spark-on-k8s **注意**:本文中的镜像仓库地址 `harbor-001.jimmysong.io` 为的镜像仓库地址为伪装地址,非本文中真正使用的镜像仓库,且该地址也不存在,请替换为您自己的镜像仓库。 diff --git a/usecases/spark-on-kubernetes.md b/usecases/spark-on-kubernetes.md new file mode 100644 index 000000000..f0164801a --- /dev/null +++ b/usecases/spark-on-kubernetes.md @@ -0,0 +1,27 @@ +# Spark 与 Kubernetes + +Spark 原生支持 standalone、mesos 和 YARN 的调度方式,当前 kubernetes 社区正在支持 kubernetes 的原生调度来运行 spark。当然您也可以在 Kubernetes 直接部署 spark on YARN 或者 spark standalone 模式。 + +## Spark Standalone + +使用 spark standalone 模式在 Kubernetes 上运行,kubernetes 不负责 spark 任务的调度。这种模式中使用的 spark 本身负责任务调度,kubernetes 只是作为一个 spark 的部署平台。 + +## Spark on Yarn + +使用 StatefulSet 和 Headless serverless 来实现。这种模式中 kubernetes 依然不负责 spark 应用的调度,而只是将 Yarn 换了一个部署环境而已。 + +下面是架构图: + +![Spark on yarn with kubernetes](../images/spark-on-yarn-with-kubernetes.png) + +### Spark on Kubernetes + +Spark on kubernetes,使用 kubernetes 作为调度引擎,spark 的任务直接调度到 node 节点上。参考:[运行支持 kubernetes 原生调度的 Spark 程序](./running-spark-with-kubernetes-native-scheduler.md)。 + +### 调度方式总结 + +下图显示的是三种调度方式中单个 kubernetes node 节点上运行的 spark 相关容器的调度情况。 + +![在 kubernetes 上使用多种调度方式](../images/spark-on-kubernetes-with-different-schedulers.jpg) + +毫无疑问,使用 kubernetes 原生调度的 spark 任务才是最节省资源的。 \ No newline at end of file diff --git a/usecases/spark-standalone-on-kubernetes.md b/usecases/spark-standalone-on-kubernetes.md index 099f15919..5319842c8 100644 --- a/usecases/spark-standalone-on-kubernetes.md +++ b/usecases/spark-standalone-on-kubernetes.md @@ -1,45 +1,45 @@ # Spark standalone on Kubernetes -该项目是基于 Spark standalone 模式,对资源的分配调度还有作业状态查询的功能实在有限,对于让 spark 使用真正原生的 kubernetes 资源调度推荐大家尝试 。 +**注:该项目已不推荐使用。** -代码和使用文档见Github地址:https://github.com/rootsongjc/spark-on-kubernetes +该项目是基于 Spark standalone 模式,对资源的分配调度还有作业状态查询的功能实在有限,对于让 spark 使用真正原生的 kubernetes 资源调度可以尝试 [apache-spark-on-k8s](https://github.com/apache-spark-on-k8s/),代码和使用文档见 [spark-on-kubernetes](https://github.com/rootsongjc/spark-on-kubernetes)。 -本文中用到的 yaml 文件可以在 `manifests/spark-standalone` 目录下找到,也可以在上面的 项目的 manifests 目录下找到。 +本文中用到的 yaml 文件可以在 `manifests/spark-standalone` 目录下找到,也可以在上面的 [spark-on-kubernetes](https://github.com/rootsongjc/spark-on-kubernetes/) 项目的 manifests 目录下找到。 -## 在Kubernetes上启动spark +## 在 Kubernetes 上启动 spark -创建名为spark-cluster的namespace,所有操作都在该namespace中进行。 +创建名为 spark-cluster 的 namespace,所有操作都在该 namespace 中进行。 -所有yaml文件都在`manifests`目录下。 +所有 yaml 文件都在 `manifests` 目录下。 ```bash $ kubectl create -f manifests/ ``` -将会启动一个拥有三个worker的spark集群和zeppelin。 +将会启动一个拥有三个 worker 的 spark 集群和 zeppelin。 -同时在该namespace中增加ingress配置,将spark的UI和zeppelin页面都暴露出来,可以在集群外部访问。 +同时在该 namespace 中增加 ingress 配置,将 spark 的 UI 和 zeppelin 页面都暴露出来,可以在集群外部访问。 -该ingress后端使用traefik。 +该 ingress 后端使用 traefik。 -## 访问spark +## 访问 spark -通过上面对ingress的配置暴露服务,需要修改本机的/etc/hosts文件,增加以下配置,使其能够解析到上述service。 +通过上面对 ingress 的配置暴露服务,需要修改本机的 /etc/hosts 文件,增加以下配置,使其能够解析到上述 service。 ```ini 172.20.0.119 zeppelin.traefik.io 172.20.0.119 spark.traefik.io ``` -172.20.0.119是我设置的VIP地址,VIP的设置和traefik的配置请查看[kubernetes-handbook](https://github.com/rootsongjc/kubernetes-handbook)。 +172.20.0.119 是我设置的 VIP 地址,VIP 的设置和 traefik 的配置请查看 [kubernetes-handbook](https://github.com/rootsongjc/kubernetes-handbook)。 -**spark ui** +**Spark UI** 访问 `http://spark.traefik.io` ![spark master ui](../images/spark-ui.jpg) -**zeppelin ui** +**Zeppelin UI** 访问 `http://zepellin.treafik.io`