阿里云容器计算服务ACS提供Serverless形态的容器算力,对于大数据类型的计算任务,使用BestEffort类型算力可以在满足其弹性算力需求的同时,降低任务的计算成本,详见BestEffort算力质量概述。本文主要为您介绍如何通过ACS提供的BestEffort类型实例运行Spark任务。
前提条件
开通容器服务ACS,具体操作请参见步骤一:开通容器计算服务ACS。
已通过Kubectl工具连接ACS集群,具体操作请参见通过kubectl快速使用ACS。
ACS集群已安装CoreDNS,具体操作请参见CoreDNS配置说明。
操作步骤
步骤一:安装Spark Operator组件
登录容器计算服务控制台,在左侧导航栏选择集群。
在集群列表页面,单击目标集群名称,然后在左侧导航栏,选择应用 > Helm。
在Helm页面,单击右侧页面中的创建按钮
在右侧的弹窗中的搜索栏,输入ack-spark-operator3.0,选中搜索结果中的组件,单击下一步按钮
单击确定按钮安装组件
在集群管理页左侧导航栏,选择 ,查看ack-spark-operator3.0的部署状态。
当ack-spark-operator3.0的状态为已部署,说明部署成功。
步骤二:提交Spark任务实例
使用以下YAML内容,创建spark-pi.yaml文件。其中在executor配置中指定了 alibabacloud.com/compute-qos: best-effort 表示Spark Pod使用BestEffort类型实例。
apiVersion: v1 kind: Namespace metadata: name: spark-demo --- apiVersion: v1 kind: ServiceAccount metadata: namespace: spark-demo name: spark --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding metadata: name: spark-role-binding roleRef: apiGroup: rbac.authorization.k8s.io kind: ClusterRole name: edit subjects: - kind: ServiceAccount name: spark namespace: spark-demo --- apiVersion: "sparkoperator.k8s.io/v1beta2" kind: SparkApplication metadata: namespace: spark-demo name: spark-pi spec: type: Scala mode: cluster image: "registry.cn-hangzhou.aliyuncs.com/koordinator-sh/spark-test:v3.4.1-0.1" imagePullPolicy: IfNotPresent mainClass: org.apache.spark.examples.SparkPi mainApplicationFile: "local:///opt/spark/examples/jars/spark-examples_2.12-3.4.1.jar" sparkVersion: "3.4.1" restartPolicy: type: Never driver: cores: 1 coreLimit: "1" memory: "512m" labels: version: 3.4.1 serviceAccount: spark executor: cores: 1 coreLimit: "1" instances: 1 memory: "512m" labels: version: 3.4.1 # best-effort表示executor使用BestEffort算力 alibabacloud.com/compute-qos: best-effort
执行以下命令,部署Spark测试应用。
kubectl apply -f spark-pi.yaml
执行以下命令,查看Spark应用的Pod状态。
kubectl get pod -n spark-demo -o wide
预期输出:
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES spark-pi-210c688b28591ef8-exec-1 1/1 Running 0 1s 192.168.x.xxx cn-xxx.192.168.x.xxx <none> <none> spark-pi-driver 1/1 Running 0 9s 192.168.x.xxx cn-xxx.192.168.x.xxx <none> <none>
由预期输出得到,Pod的状态为
Running
,表示Spark应用已在测试机上正常运行。
步骤三:查看任务执行结果
等待spark-pi-driver Pod的状态为Completed时,执行以下命令,查看Spark应用运行结果。
kubectl logs -n spark-demo spark-pi-driver
预期输出:
...... 23/10/13 09:23:40 INFO DAGScheduler: Job 0 finished: reduce at SparkPi.scala:38, took 1.092069 s Pi is roughly 3.137675688378442 23/10/13 09:23:40 INFO SparkContext: SparkContext is stopping with exitCode 0. ......