pull/454/head
Jimmy Song 2021-10-30 08:15:58 +08:00
parent 1252973b07
commit be643b7ce7
No known key found for this signature in database
GPG Key ID: CBA666E6EF8B2C3A
5 changed files with 47 additions and 51 deletions

View File

@ -246,8 +246,8 @@
* [微服务中的服务发现](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 与 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)

View File

@ -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任务才是最节省资源的。

View File

@ -1,5 +1,7 @@
# 运行支持kubernetes原生调度的Spark程序
**注:该项目已不推荐使用。**
TL;DR 这个主题比较大,该开源项目也还在不断进行中,我单独做了一个 web 用来记录 spark on kubernetes 的研究和最新进展见: https://jimmysong.io/spark-on-k8s
**注意**:本文中的镜像仓库地址 `harbor-001.jimmysong.io` 为的镜像仓库地址为伪装地址,非本文中真正使用的镜像仓库,且该地址也不存在,请替换为您自己的镜像仓库。

View File

@ -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 任务才是最节省资源的。

View File

@ -1,45 +1,45 @@
# Spark standalone on Kubernetes
该项目是基于 Spark standalone 模式,对资源的分配调度还有作业状态查询的功能实在有限,对于让 spark 使用真正原生的 kubernetes 资源调度推荐大家尝试 <https://github.com/apache-spark-on-k8s/>
**注:该项目已不推荐使用。**
代码和使用文档见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` 目录下找到,也可以在上面的 <https://github.com/rootsongjc/spark-on-kubernetes/> 项目的 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`