すべてのプロダクト
Search
ドキュメントセンター

Container Service for Kubernetes:ACK Serverless を使用した Spark タスクの作成

最終更新日:Mar 26, 2026

ACK Serverless は、Spark タスクをオンデマンド Pod として実行します。Pod ライフサイクルが終了すると課金が停止するため、コンピューティングリソースを予約したり、クラスターを拡張したりする必要はありません。コストをさらに削減するには、プリエンプティブインスタンスを使用します。

前提条件

開始する前に、以下を確認してください。

spark-operator のデプロイ

次のいずれかの方法を使用して、ack-spark-operator Helm チャートをデプロイします。

オプション 1: ACK コンソール

  1. Container Service 管理コンソールまたはContainer Service for Kubernetes (ACK) コンソールにログインします。

  2. 左側のナビゲーションウィンドウで、[マーケットプレイス] > [マーケットプレイス] を選択します。

  3. ack-spark-operator」を検索して選択し、チャートをデプロイします。

オプション 2: Helm CLI (Helm V3 以降が必要)

次のコマンドを実行します。

# 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

デプロイ後、spark-operator が実行されていることを確認します。

kubectl -n spark-operator get pod

期待される出力:

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

Spark タスクの実行

このセクションでは、モンテカルロサンプリングを使用して円周率の値を推定する、組み込みの SparkPi の例をデプロイする手順を説明します。

ステップ 1: SparkApplication マニフェストの作成

次の内容で spark-pi.yaml という名前のファイルを作成します。

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

ステップ 2: タスクの送信

kubectl apply -f spark-pi.yaml

期待される出力:

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

ステップ 3: タスクステータスの確認

次のコマンドを実行して、Spark タスクのデプロイメントステータスを表示します。

kubectl get pod

タスクが進行中の場合の期待される出力:

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

Pod は Running 状態であり、Spark タスクがデプロイされていることを示します。

コマンドを再度実行して、最終ステータスを確認します。

kubectl get pod

タスクが完了した場合の期待される出力:

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

Pod は Completed 状態であり、Spark タスクがデプロイされていることを示します。

ステップ 4: 結果の表示

kubectl logs spark-pi-driver | grep Pi

期待される出力:

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

(オプション) プリエンプティブインスタンスの使用

コンピューティングコストを削減するために、Pod にプリエンプティブインスタンスのアノテーションを追加します。詳細については、「プリエンプティブインスタンスの使用」をご参照ください。