Kubernetes Scheduler运行Spark(一)

概念:

版本2.3.0起,Spark开始支持采用Kubernetes作为native的资源调度器;

使用Kubernetes作为原生调度器需要满足如下的前提条件:

  • Spark 2.3+
  • Kubernetes 1.6+
  • 有增删改查POD的能力
  • Kubernetes配置了DNS

和传统的Spark运行方式一样,通过spark-submit向Kubernetes提交任务,只是将master设置为Kubernetes的master的地址就可以使用Kubernetes的scheduler对spark的任务进行调度;

在提交任务之后,会先启动一个driver pod, driver和Kubernetes沟通并启动一系列的executor pod执行任务。在任务完成之后,所有executor pod都会被删除,但是driver pod会被保留,并处于complete状态,不占用任何内存和cpu资源,所有的log和结果都可以在drvier pod中找到。

Kubernetes运行Spark任务:

1:下载spark2.3.0-bin-hadoop2.7.tgz

wget http://archive.apache.org/dist/spark/spark-2.3.0/spark-2.3.0-bin-hadoop2.7.tgz

扫描二维码关注公众号,回复: 9521132 查看本文章

2:构建docker镜像

cd spark-2.3.0-bin-hadoop2.7

docker build -t bigdata/spark:2.3.0 -f kubernetes/dockerfiles/spark/Dockerfile .

docker push bigdata/spark:2.3.0

3:建立Spark的运行service account和cluster role

kubectl create serviceaccount spark

kubectl create clusterrolebinding spark-role --clusterrole=edit --serviceaccount=default:spark --namespace=default

4:submit Pi提交计算任务

bin/spark-submit --master k8s://https://xxx.xxx.xxx.xxx:6443 #k8s的master集群 \

--deploy-mode cluster --name spark-pi #Pod名字的前缀 \

--class org.apache.spark.examples.SparkPi \

--conf spark.executor.instances=2 \

--conf spark.kubernetes.authenticate.driver.serviceAccountName=spark \

--conf spark.kubernetes.container.image=bigdata/spark:2.3.0 \

local:///opt/spark/examples/jars/spark-examples_2.11-2.3.0.jar

5:任务运行

kubectl get pods --all-namespaces -o wide | grep spark | grep -v Completed

6:查看日志

kubectl logs xxxx

发布了114 篇原创文章 · 获赞 16 · 访问量 10万+

猜你喜欢

转载自blog.csdn.net/CodeAsWind/article/details/104605140