概述
学习资料来源于官方文档,感兴趣的同学,可以 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日,文中内容可能已过时,请谨慎参考。