本文作为一个辅助笔记,详细内容参考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是否正常运行