基于Kubernetes的Spark集群部署实践

本文作为一个辅助笔记,详细内容参考http://hehhpku.blog.51cto.com/3438622/1844785


Spark是新一代分布式内存计算框架,Apache开源的顶级项目。相比于Hadoop Map-Reduce计算框架,Spark将中间计算结果保留在内存中,速度提升10~100倍;同时它还提供更丰富的算子,采用弹性分布式数据集(RDD)实现迭代计算,更好地适用于数据挖掘、机器学习算法,极大提升开发效率。

Docker是轻量级虚拟化容器技术,具有轻便性、隔离性、一致性等特点,可以极大简化开发者的部署运维流程,降低服务器成本。

Kubernetes是Google开源的容器集群管理系统,提供应用部署、维护、 扩展等功能,能够方便地管理大规模跨主机的容器应用。

相比于在物理机上部署,在Kubernetes集群上部署Spark集群,具有以下优势:

快速部署:安装1000台级别的Spark集群,在Kubernetes集群上只需设定worker副本数目replicas=1000,即可一键部署。

快速升级:升级Spark版本,只需替换Spark镜像,一键升级。

弹性伸缩:需要扩容、缩容时,自动修改worker副本数目replicas即可。

高一致性:各个Kubernetes节点上运行的Spark环境一致、版本一致

高可用性:如果Spark所在的某些node或pod死掉,Kubernetes会自动将计算任务,转移到其他node或创建新pod。

强隔离性:通过设定资源配额等方式,可与WebService应用部署在同一集群,提升机器资源使用效率,从而降低服务器成本。

一、构建Docker镜像

docker login index.docker.io

docker pull index.docker.io/caicloud/spark:1.5.2

docker pull index.docker.io/caicloud/zeppelin:0.5.6

二、在Kubernetes上创建Spark集群

第一步:创建命名空间namespace

使用Namespace: (${CLUSTER_NAME}和${USER_NAME}可在kubeconfig文件中查看)

$ kubectl config set-context spark --namespace=spark-cluster --cluster=${CLUSTER_NAME} --user=${USER_NAME}

$ kubectl config use-context spark

第二步:启动master服务

1) 创建ReplicationController:

spark-master-controller.yaml

spark-worker-controller.yaml

2) 创建Master-Service

3) 创建WebUI-Service

第三步:启动 Spark workers

spark-worker-controller.yaml

查看 workers是否正常运行

你可能感兴趣的:(基于Kubernetes的Spark集群部署实践)