本文作為一個(gè)輔助筆記,詳細(xì)內(nèi)容參考http://hehhpku.blog.51cto.com/3438622/1844785
Spark是新一代分布式內(nèi)存計(jì)算框架,Apache開源的頂級(jí)項(xiàng)目。相比于Hadoop Map-Reduce計(jì)算框架,Spark將中間計(jì)算結(jié)果保留在內(nèi)存中,速度提升10~100倍;同時(shí)它還提供更豐富的算子,采用彈性分布式數(shù)據(jù)集(RDD)實(shí)現(xiàn)迭代計(jì)算,更好地適用于數(shù)據(jù)挖掘、機(jī)器學(xué)習(xí)算法,極大提升開發(fā)效率。
Docker是輕量級(jí)虛擬化容器技術(shù),具有輕便性、隔離性、一致性等特點(diǎn),可以極大簡(jiǎn)化開發(fā)者的部署運(yùn)維流程,降低服務(wù)器成本。
Kubernetes是Google開源的容器集群管理系統(tǒng),提供應(yīng)用部署、維護(hù)、 擴(kuò)展等功能,能夠方便地管理大規(guī)??缰鳈C(jī)的容器應(yīng)用。
相比于在物理機(jī)上部署,在Kubernetes集群上部署Spark集群,具有以下優(yōu)勢(shì):
快速部署:安裝1000臺(tái)級(jí)別的Spark集群,在Kubernetes集群上只需設(shè)定worker副本數(shù)目replicas=1000,即可一鍵部署。
快速升級(jí):升級(jí)Spark版本,只需替換Spark鏡像,一鍵升級(jí)。
彈性伸縮:需要擴(kuò)容、縮容時(shí),自動(dòng)修改worker副本數(shù)目replicas即可。
高一致性:各個(gè)Kubernetes節(jié)點(diǎn)上運(yùn)行的Spark環(huán)境一致、版本一致
高可用性:如果Spark所在的某些node或pod死掉,Kubernetes會(huì)自動(dòng)將計(jì)算任務(wù),轉(zhuǎn)移到其他node或創(chuàng)建新pod。
強(qiáng)隔離性:通過設(shè)定資源配額等方式,可與WebService應(yīng)用部署在同一集群,提升機(jī)器資源使用效率,從而降低服務(wù)器成本。
一、構(gòu)建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上創(chuàng)建Spark集群
第一步:創(chuàng)建命名空間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
第二步:?jiǎn)?dòng)master服務(wù)
1) 創(chuàng)建ReplicationController:
spark-master-controller.yaml
spark-worker-controller.yaml
2) 創(chuàng)建Master-Service
3) 創(chuàng)建WebUI-Service
第三步:?jiǎn)?dòng) Spark workers
spark-worker-controller.yaml
查看 workers是否正常運(yùn)行