Todos los productos
Search
Centro de documentos

Container Service for Kubernetes:Crear un trabajo de cómputo Spark en un clúster serverless de ACK

Última actualización: Sep 04, 2026

ACK Serverless ejecuta las tareas de Spark como Pods bajo demanda. La facturación se detiene cuando finaliza el ciclo de vida del Pod, por lo que no es necesario reservar recursos de cómputo ni ampliar el clúster. Para reducir aún más los costos, utilice preemptible instances.

Requisitos previos

Antes de empezar, asegúrese de contar con a continuación:

Despliegue spark-operator

Despliegue el chart de Helm ack-spark-operator mediante uno de los siguientes métodos.

Opción 1: Consola de ACK

  1. Inicie sesión en la Container Service Management Consoleconsola de Container Service for Kubernetes (ACK).

  2. En el panel de navegación izquierdo, seleccione Marketplace > Marketplace.

  3. Busque y seleccione ack-spark-operator, y luego despliegue el chart.

Opción 2: CLI de Helm (se requiere Helm V3 o posterior)

Ejecute los siguientes comandos:

# Create a service account
kubectl create serviceaccount spark

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

# Add the Helm repository and install the operator
helm repo add aliyunhub https://aliacs-app-catalog.oss-cn-hangzhou.aliyuncs.com/charts-incubator/
helm install ack-spark-operator aliyunhub/ack-spark-operator

Después del despliegue, compruebe que spark-operator se esté ejecutando:

kubectl -n spark-operator get pod

Salida esperada:

NAME                                  READY   STATUS      RESTARTS   AGE
ack-spark-operator-7698586d7b-pvwln   1/1     Running     0          5m9s
ack-spark-operator-init-26tvh         0/1     Completed   0          5m9s

Ejecutar una tarea de Spark

En esta sección se describe cómo desplegar el ejemplo integrado SparkPi, que estima el valor de pi mediante muestreo de Montecarlo.

Paso 1: Crear el manifiesto de SparkApplication

Cree un archivo llamado spark-pi.yaml con el siguiente contenido:

apiVersion: "sparkoperator.k8s.io/v1beta2"
kind: SparkApplication
metadata:
  name: spark-pi
  namespace: default
spec:
  arguments:
  - "1000"
  sparkConf:
    "spark.scheduler.maxRegisteredResourcesWaitingTime": "3000s"
    "spark.kubernetes.allocation.batch.size": "1"
    "spark.rpc.askTimeout": "36000s"
    "spark.network.timeout": "36000s"
    "spark.rpc.lookupTimeout": "36000s"
    "spark.core.connection.ack.wait.timeout": "36000s"
    "spark.executor.heartbeatInterval": "10000s"
  type: Scala
  mode: cluster
  image: "registry.aliyuncs.com/acs/spark:ack-2.4.5-latest"
  imagePullPolicy: Always
  mainClass: org.apache.spark.examples.SparkPi
  mainApplicationFile: "local:///opt/spark/examples/jars/spark-examples_2.11-2.4.5.jar"
  sparkVersion: "2.4.5"
  restartPolicy:
    type: Never
  driver:
    cores: 4
    coreLimit: "4"
    annotations:
      k8s.aliyun.com/eci-image-cache: "true"
    memory: "6g"
    memoryOverhead: "2g"
    labels:
      version: 2.4.5
    serviceAccount: spark
  executor:
    annotations:
      k8s.aliyun.com/eci-image-cache: "true"
    cores: 2
    instances: 1
    memory: "3g"
    memoryOverhead: "1g"
    labels:
      version: 2.4.5

Paso 2: Enviar la tarea

kubectl apply -f spark-pi.yaml

Salida esperada:

sparkapplication.sparkoperator.k8s.io/spark-pi created

Paso 3: Comprobar el estado de la tarea

Ejecute el siguiente comando para consultar el estado de despliegue de la tarea de Spark:

kubectl get pod

Salida esperada mientras la tarea está en curso:

NAME              READY   STATUS    RESTARTS   AGE
spark-pi-driver   1/1     Running   0          2m12s

El pod se encuentra en estado Running, lo que indica que la tarea de Spark se está desplegando.

Vuelva a ejecutar el comando para comprobar el estado final:

kubectl get pod

Salida esperada cuando la tarea finaliza:

NAME              READY   STATUS      RESTARTS   AGE
spark-pi-driver   0/1     Completed   0          2m54s

El pod se encuentra en estado Completed, lo que indica que la tarea de Spark se ha desplegado correctamente.

Paso 4: Consultar el resultado

kubectl logs spark-pi-driver | grep Pi

Salida esperada:

20/04/30 07:27:51 INFO DAGScheduler: ResultStage 0 (reduce at SparkPi.scala:38) finished in 11.031 s
20/04/30 07:27:51 INFO DAGScheduler: Job 0 finished: reduce at SparkPi.scala:38, took 11.137920 s
Pi is roughly 3.1414371514143715

(Opcional) Uso de preemptible instances

Agregue anotaciones de preemptible instances al pod para reducir los costos de cómputo. Para obtener más información, consulte Use preemptible instances.