创建Spark任务

通过ACK One Fleet实例,您可以使用和单集群相同的方式创建Spark任务。由Fleet实例根据Spark任务需要的资源和关联集群的剩余资源,执行动态调度策略,选择适合的关联集群下发Spark任务。本文介绍如何创建Spark任务并查看任务状态。

前提条件

  • Spark Operator支持的API版本为sparkoperator.k8s.io/v1beta2,用于管理Spark应用的CRD。默认情况下,Fleet实例已支持Spark应用的CRD,Fleet实例管理员可以通过以下命令查看CRD。

    kubectl get crd sparkapplications.sparkoperator.k8s.io
  • 已从ACK One控制台获取Fleet实例的KubeConfig,并通过kubectl连接至Fleet实例。

  • 已安装AMC命令行工具。具体操作,请参见AMC命令行帮助

步骤一:安装Spark Operator

  1. Fleet实例管理员登录容器服务管理控制台

  2. 在控制台左侧导航栏中,选择市场 > 应用市场

  3. 应用市场页面单击应用目录页签,然后搜索并选中ack-spark-operator3.0

  4. ack-spark-operator3.0页面,单击一键部署

  5. 在弹出面板中,选择集群和命名空间,然后单击下一步

  6. 参数配置页面,将sparkJobNamespace设置为有效的命名空间名称,例如default或您使用的其他命名空间。然后单击确定

步骤二:创建Spark任务并查看状态

  1. 开发者用户使用以下YAML文件,在Fleet实例上创建任务。

    示例的命名空间default,示例的任务名称为pi

    apiVersion: "sparkoperator.k8s.io/v1beta2"
    kind: SparkApplication
    metadata:
      name: pi
      namespace: default
    spec:
      type: Scala
      mode: cluster
      image: "acr-multiple-clusters-registry.cn-hangzhou.cr.aliyuncs.com/ack-multiple-clusters/spark:v3.1.1"
      imagePullPolicy: Always
      mainClass: org.apache.spark.examples.SparkPi
      mainApplicationFile: "local:///opt/spark/examples/jars/spark-examples_2.12-3.1.1.jar"
      sparkVersion: "3.1.1"
      restartPolicy:
        type: Never
      volumes:
        - name: "test-volume"
          hostPath:
            path: "/tmp"
            type: Directory
      driver:
        cores: 1
        coreLimit: "1200m"
        memory: "512m"
        labels:
          version: 3.1.1
        serviceAccount: ack-spark-operator3.0-spark
        volumeMounts:
          - name: "test-volume"
            mountPath: "/tmp"
      executor:
        cores: 1
        instances: 3
        memory: "512m"
        labels:
          version: 3.1.1
        volumeMounts:
          - name: "test-volume"
            mountPath: "/tmp"
  2. 执行以下命令,在Fleet实例上获取任务的调度结果。

    如果调度失败,则显示为空。请检查是否正确配置命名空间与配额。如果命名空间配置配额或者配额用完,任务将暂停调度。

    kubectl get sparkapplication pi  -o jsonpath='{.metadata.annotations.scheduling\.x-k8s\.io/placement}'
  3. 查看Spark任务的状态。

    • 执行以下命令,在Fleet实例上获取任务的运行状态。

      kubectl get sparkapplication pi 

      预期输出:

      NAME   STATUS      ATTEMPTS   START    FINISH    AGE
      pi     COMPLETED   1          ***      ***       ***
    • 执行以下命令获取任务相关Pod的运行状态。安装amc命令请参见AMC命令行帮助

      kubectl amc get pod -j sparkapplication/pi 

      预期输出:

      Run on ManagedCluster managedcluster-c1***e5
      NAME        READY   STATUS      RESTARTS   AGE
      pi-driver  0/1     Completed   0          ***
    • 执行以下命令获取Pod的运行日志。

      kubectl amc logs pi-driver  -j sparkapplication/pi

      预期输出:

      Run on ManagedCluster managedcluster-c1***e5
      ...
      Pi is roughly 3.144875724378622
      ...