Tous les produits
Search
Centre de documentation

Container Service for Kubernetes:Créer une tâche de calcul Spark sur un cluster ACK Serverless

Dernière mise à jour :Aug 11, 2026

ACK Serverless exécute les tâches Spark sous forme de Pods à la demande. La facturation s'arrête à la fin du cycle de vie du Pod, ce qui vous évite de réserver des ressources de calcul ou d'étendre le cluster. Pour réduire encore davantage les coûts, utilisez des instances préemptibles.

Prérequis

Avant de commencer, assurez-vous d'avoir :

Déployer spark-operator

Déployez le chart Helm ack-spark-operator selon l'une des méthodes suivantes.

Option 1 : Console ACK

  1. Connectez-vous à la console Container Service Managementconsole Container Service for Kubernetes (ACK).

  2. Dans le volet de navigation de gauche, choisissez Marketplace > Marketplace.

  3. Recherchez et sélectionnez ack-spark-operator, puis déployez le chart.

Option 2 : CLI Helm (Helm V3 ou version ultérieure requise)

Exécutez les commandes suivantes :

# 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

Après le déploiement, vérifiez que spark-operator est en cours d'exécution :

kubectl -n spark-operator get pod

Résultat attendu :

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

Exécuter une tâche Spark

Cette section explique comment déployer l'exemple intégré SparkPi, qui estime la valeur de pi à l'aide d'un échantillonnage de Monte Carlo.

Étape 1 : Créer le manifeste SparkApplication

Créez un fichier nommé spark-pi.yaml avec le contenu suivant :

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

Étape 2 : Soumettre la tâche

kubectl apply -f spark-pi.yaml

Résultat attendu :

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

Étape 3 : Vérifier l'état de la tâche

Exécutez la commande suivante pour afficher l'état du déploiement de la tâche Spark :

kubectl get pod

Résultat attendu lorsque la tâche est en cours d'exécution :

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

Le Pod est à l'état Running, ce qui indique que la tâche Spark est en cours de déploiement.

Exécutez à nouveau la commande pour vérifier l'état final :

kubectl get pod

Résultat attendu lorsque la tâche est terminée :

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

Le Pod est à l'état Completed, ce qui indique que la tâche Spark est terminée.

Étape 4 : Afficher le résultat

kubectl logs spark-pi-driver | grep Pi

Résultat attendu :

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

(Facultatif) Utiliser des instances préemptibles

Ajoutez des annotations pour les instances préemptibles au Pod afin de réduire les coûts de calcul. Pour plus de détails, consultez la rubrique Utiliser des instances préemptibles.