Todos os produtos
Search
Central de documentação

Container Service for Kubernetes:Criar um job de computação Spark em um cluster ACK serverless

Última atualização: Jun 27, 2026

O ACK Serverless executa tarefas Spark como Pods sob demanda — o faturamento é encerrado ao término do ciclo de vida do Pod, eliminando a necessidade de reservar recursos de computação ou expandir o cluster. Para reduzir ainda mais os custos, utilize instâncias preemptíveis.

Pré-requisitos

Antes de começar, certifique-se de ter:

Implantar o spark-operator

Implante o chart Helm ack-spark-operator usando um dos métodos a seguir.

Opção 1: Console do ACK

  1. Acesse o Container Service Management ConsoleContainer Service for Kubernetes (ACK) console.

  2. No painel de navegação à esquerda, escolha Marketplace > Marketplace.

  3. Pesquise e selecione ack-spark-operator e implante o chart.

Opção 2: Helm CLI (requer Helm V3 ou superior)

Execute os seguintes 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

Após a implantação, verifique se o spark-operator está em execução:

kubectl -n spark-operator get pod

Saída 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

Executar uma tarefa Spark

Esta seção descreve como implantar o exemplo SparkPi integrado, que estima o valor de pi por amostragem Monte Carlo.

Etapa 1: Criar o manifesto do SparkApplication

Crie um arquivo chamado spark-pi.yaml com o seguinte conteúdo:

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

Etapa 2: Enviar a tarefa

kubectl apply -f spark-pi.yaml

Saída esperada:

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

Etapa 3: Verificar o status da tarefa

Execute o comando a seguir para verificar o status de implantação da tarefa Spark:

kubectl get pod

Saída esperada quando a tarefa está em andamento:

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

O pod está no estado Running, indicando que a tarefa Spark está sendo implantada.

Execute o comando novamente para conferir o status final:

kubectl get pod

Saída esperada quando a tarefa é concluída:

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

O pod está no estado Completed, indicando que a tarefa Spark foi concluída.

Etapa 4: Visualizar o resultado

kubectl logs spark-pi-driver | grep Pi

Saída 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) Usar instâncias preemptíveis

Adicione anotações de instâncias preemptíveis ao pod para reduzir os custos de computação. Para mais detalhes, consulte Usar instâncias preemptíveis.