概述
学习资料来源于官方文档,感兴趣的同学,可以 clone 下来研究一下。
Spark Example
本文的目标就是利用 Kubernetes 和 Docker 来构建一个可用的 Spark 集群。
Sources
Prerequisites
在运行这个 Example 的前提如下:
- K8S 集群安装和运行
- 安装 kubectl 来和 K8S 集群交互
- K8S 集群提供 kube-dns 等集成
创建namespace
这一步很容易理解,就是以 namespace 作为资源隔离的条件
启动 Spark Master
以下 Yaml 文件是创建 Spark Master 需要用到的,下面会针对这个文件来解释一下。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
|
# ReplicationController 保证集群中有一个运行中的 Master,间接利用了 K8S 来实现了 Spark Master 的 HA 问题
kind: ReplicationController
apiVersion: v1
# Pod 的 metadata
metadata:
name: spark-master-controller
spec:
# 数量必须为1,多了会减,少了会加,由 K8S 自身来调度
replicas: 1
# 选择包含 component 参数,值为 spark-master 的来部署
selector:
component: spark-master
template:
metadata:
labels:
component: spark-master
spec:
containers:
- name: spark-master
# 官方镜像
image: k8s.gcr.io/spark:1.5.2_v1
command: ["/start-master"]
ports:
# Spark Master 的 UI 访问端口
- containerPort: 7077
- containerPort: 8080
# 资源
resources:
requests:
# cpu 资源的请求 100m
cpu: 100m
|
然后创建 Spark-master 的 Service。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
# 这是一个 Service
kind: Service
apiVersion: v1
metadata:
name: spark-master
spec:
ports:
- port: 7077
targetPort: 7077
name: spark
- port: 8080
targetPort: 8080
name: http
selector:
component: spark-master
|
查看 Pod 的日志,确定 Master 已经被正常启动。为了可以打开 Spark Web UI,并且用可以跳转到 Worker 来查看日志,需要构建一个 Proxy
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
|
kind: ReplicationController
apiVersion: v1
metadata:
name: spark-ui-proxy-controller
spec:
replicas: 1
selector:
component: spark-ui-proxy
template:
metadata:
labels:
component: spark-ui-proxy
spec:
containers:
- name: spark-ui-proxy
image: elsonrodriguez/spark-ui-proxy:1.0
ports:
- containerPort: 80
resources:
requests:
cpu: 100m
args:
- spark-master:8080
livenessProbe:
httpGet:
path: /
port: 80
initialDelaySeconds: 120
timeoutSeconds: 5
|
警告
本文最后更新于 2017年2月1日,文中内容可能已过时,请谨慎参考。