目录

Spark-Kubernetes-Example学习

概述

学习资料来源于官方文档,感兴趣的同学,可以 clone 下来研究一下。

Spark Example

本文的目标就是利用 Kubernetes 和 Docker 来构建一个可用的 Spark 集群。

Sources

Prerequisites

在运行这个 Example 的前提如下:

  1. K8S 集群安装和运行
  2. 安装 kubectl 来和 K8S 集群交互
  3. 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日,文中内容可能已过时,请谨慎参考。