本篇文档将介绍如何使用 Spark Operator 提交 Spark 作业至 ACK 集群中。
Spark Operator 是一个 Kubernetes operator,用于向 Kubernetes 集群提交 Spark 作业并管理作业的整个生命周期。
- 已创建 ACK Pro 集群 或已创建 ACK Serverless 集群。
目前 ACK 应用市场中提供了两个版本的 Spark Operator:
- ack-spark-operator 使用的 Spark 版本为 2.x,适用于运行 2.x 版本的 Spark 作业。
- ack-spark-operator3.0 使用的 Spark 版本为 3.x,适用于运行 3.x 版本的 Spark 作业。
下面以 ack-spark-operator3.0
为例,介绍如何通过容器服务控制台或 Helm 进行部署。
- 登录容器服务管理控制台,在左侧导航栏选择市场 > 应用市场。
- 在应用市场页面,搜索
ack-spark-operator3.0
,然后单击该应用。 - 在应用详情页面,单击右上角的一键部署,然后按照页面提示进行部署。
- 在基本信息页面,填写目标集群、命名空间和发布名称后,单击下一步。
- 在参数配置页面,选择 Chart 版本,将参数配置完成后,单击确定。
完整的参数配置说明可以在应用详情页面查看。
添加阿里云容器服务 Helm 仓库并更新仓库索引:
helm repo add aliyunhub https://aliacs-k8s-ap-southeast-1.oss-ap-southeast-1.aliyuncs.com/app/charts-incubator
helm repo update
执行如下命令以在 spark-operator
命名空间中部署 ack-spark-operator3.0
,如果命名空间 spark-operator
不存在,则创建该命令空间:
helm install ack-spark-operator3.0 aliyunhub/ack-spark-operator3.0 \
--namespace spark-operator \
--create-namespace \
--set image.repository=registry-cn-beijing.ack.aliyuncs.com/acs/spark-operator
注:
-
如需修改配置项,可以添加多个格式形如
--set key1=value1,key2=value2
的参数,例如添加--set webhook.enable=true
参数以启用 webhook 功能:helm install ack-spark-operator3.0 aliyunhub/ack-spark-operator3.0 \ --namespace spark-operator \ --create-namespace \ --set image.repository=registry-cn-beijing.ack.aliyuncs.com/acs/spark-operator \ --set webhook.enable=true
-
可以通过内网 VPC 加速
spark-operator
镜像拉取,例如您的 ACK 集群位于北京地域,则可以使用镜像registry-cn-beijing-vpc.ack.aliyuncs.com/acs/spark-operator
,其他地域请将cn-beijing
替换成相应的地域代码即可。
创建如下示例清单文件并保存为 spark-pi.yaml
:
apiVersion: sparkoperator.k8s.io/v1beta2
kind: SparkApplication
metadata:
name: spark-pi
namespace: spark-operator
spec:
type: Scala
mode: cluster
image: apache/spark:3.5.0
imagePullPolicy: Always
mainClass: org.apache.spark.examples.SparkPi
mainApplicationFile: local:///opt/spark/examples/jars/spark-examples_2.12-3.5.0.jar
arguments:
- "1000"
sparkVersion: "3.5.0"
restartPolicy:
type: Never
driver:
cores: 1
coreLimit: "1200m"
memory: "512m"
labels:
version: "3.5.0"
serviceAccount: ack-spark-operator3.0-spark
executor:
instances: 1
cores: 1
coreLimit: "1200m"
memory: "512m"
labels:
version: "3.5.0"
执行如下命令以提交 Spark 作业:
$ kubectl create -f spark-pi.yaml
sparkapplication.sparkoperator.k8s.io/spark-pi created
执行如下命令以查看 Spark 作业运行状态:
kubectl get -n spark-operator sparkapplication spark-pi
查看 Spark 作业对应的 Pod 状态:
# 查看作业 Pod 状态
kubectl get -n spark-operator pod
查看 Spark driver pod 的日志:
kubectl logs -n spark-operator spark-pi-driver
如果在部署 Spark Operator 时将 uiService.enable
参数设置为 true
,则在提交 Spark 作业之后,会为其创建相应的 Service 资源用于暴露其 Web UI,执行如下命令可以将该 Service 的 4040
端口转发到本地:
kubectl port-forward -n spark-operator services/spark-pi-ui-svc 4040
如果在部署是没有将 uiService.enable
参数设置为 true
,则可以执行如下命令以直接将 driver pod 的 4040
端口转发到本地:
kubectl port-forward -n spark-operator pods/spark-pi-driver 4040
端口转发成功后访问 http://localhost:4040 即可查看 Spark Web UI。
注:
- Spark Web UI 只能在 Spark driver pod 处于运行状态时才可以访问,因此当作业运行结束之后,该 Web UI 将不再可用。