首页 容器计算服务 操作指南 最佳实践 使用任务型实例运行Spark任务

使用任务型实例运行Spark任务

更新时间: 2024-01-16 18:15:02

阿里云容器计算服务ACS提供Serverless形态的容器算力,分为通用型、任务型以及独享型三类。对于大数据类型的计算任务,使用任务型实例可以在满足其弹性算力需求的同时,降低任务的计算成本。本文主要为您介绍如何通过ACS提供的任务型实例运行Spark任务。

前提条件

操作步骤

步骤一:安装Spark Operator组件

  1. 登录容器计算服务管理控制台,在左侧导航栏选择集群。

  2. 在集群列表页面,单击目标集群名称,然后在左侧导航栏,选择应用 > Helm

  3. Helm页面,单击右侧页面中的创建按钮

  4. 在右侧的弹窗中的搜索栏,输入ack-spark-operator3.0,选中搜索结果中的组件,单击下一步按钮image.png

  5. 单击确定按钮安装组件

  6. 在集群管理页左侧导航栏,选择应用 > Helm,查看ack-spark-operator3.0的部署状态。

  7. 当ack-koordinator的状态已部署,说明部署成功。

步骤二:提交Spark任务实例

  1. 使用以下YAML内容,创建spark-pi.yaml文件。其中 alibabacloud.com/instance-type: best-effort 表示Spark Pod使用任务型实例。

    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
          # best-effort表示driver使用任务型实例
          alibabacloud.com/instance-type: best-effort
        serviceAccount: spark
      executor:
        cores: 1
        coreLimit: "1"
        instances: 1
        memory: "512m"
        labels:
          version: 3.4.1
          # best-effort表示executor使用任务型实例
          alibabacloud.com/instance-type: best-effort
  2. 执行以下命令,部署Spark测试应用。

    kubectl apply -f spark-pi.yaml

  3. 执行以下命令,查看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应用已在测试机上正常运行。

步骤三:查看任务执行结果

  1. 等待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.
    ......